2 u010350563 u010350563 于 2015.07.14 15:04 提问

SSH Action 动态调用 参数 404异常 300C
1. 异常情况:
1.  There is no Action mapped for namespace [/dd] and action name [laladList] associated with context path [/baee]. - [unknown location]
1.  at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
1.  at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
1.  at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
1.  at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
1.  at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501)
1.  at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
1.  at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
1.  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

1. web.xml
1. <?xml version="1.0" encoding="UTF-8"?>
1. <web-app version="3.0" 
1.  xmlns="http://java.sun.com/xml/ns/javaee" 
1.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
1.  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
1.  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
1.  
1.  <display-name>项目名称</display-name>
1.  <description>项目描述</description>
1.  
1.  <jsp-config>  
1.         <taglib>  
1.             <!-- 配置标签的引用地址 JSP页面中引用时使用-->  
1.             <taglib-uri>/el-extends</taglib-uri>  
1.             <!-- 配置标签的TLD文件地址 -->  
1.             <taglib-location>/WEB-INF/ELExtends.tld</taglib-location>  
1.         </taglib>  
1.     </jsp-config> 
1.     
1.  <!-- 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件 -->
1.  <welcome-file-list>
1.      <welcome-file>index.jsp</welcome-file>
1.  </welcome-file-list>
1.  
1.  <!-- 配置Session十分钟有效时间 -->
1.  <session-config>  
1.      <session-timeout>10</session-timeout>  
1.  </session-config>
1.  
1.  <!-- 配置错误页面 -->
1.  
1.     
1.     <!-- 将HibernateSession开关控制配置在Filter,保证一个请求一个session,并对lazy提供支持 -->
1.  <filter> 
1.      <filter-name>OpenSessionInViewFilter</filter-name>  
1.      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 
1.  </filter> 
1.  
1.  <!-- 配置伪静态 -->
1.  <filter>
1.      <filter-name>UrlRewriteFilter</filter-name>
1.      <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
1.  </filter>
1.  
1.  <filter-mapping>
1.      <filter-name>UrlRewriteFilter</filter-name>
1.      <url-pattern>/*</url-pattern>
1.      <dispatcher>REQUEST</dispatcher>
1.      <dispatcher>FORWARD</dispatcher>
1.  </filter-mapping>
1.  
1.  <!-- 配置Struts2 -->
1.  <filter>
1.      <filter-name>struts2</filter-name>
1.      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
1.      <init-param>
1.          <param-name>config</param-name>
1.          <param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value>
1.      </init-param>
1.  </filter>
1.  
1.  <filter-mapping>
1.      <filter-name>struts2</filter-name>
1.      <url-pattern>/*</url-pattern>
1.      <dispatcher>FORWARD</dispatcher>
1.      <dispatcher>REQUEST</dispatcher>
1.  </filter-mapping>
1.  
1.  <!-- 配置Spring -->
1.  <context-param>
1.      <param-name>contextConfigLocation</param-name>
1.      <param-value>classpath:cn/baee/config/applicationContext.*.xml</param-value>
1.  </context-param>
1.  <listener>
1.      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
1.  </listener>
1.  
1.  <!-- log4j的配置文件里可以用${project}来表示刚刚设进去的系统变量 -->  
1.  <context-param>  
1.         <param-name>webAppRootKey</param-name>  
1.         <param-value>project</param-value>
1.     </context-param> 
1.     
1.  <!-- 配置由Sprng载入的Log4j配置文件位置 -->
1.  <context-param>
1.      <param-name>log4jConfigLocation</param-name>
1.      <param-value>/WEB-INF/classes/cn/baee/config/log.properties</param-value>
1.  </context-param>
1.  
1.  <!-- Spring刷新Log4j配置文件变动的间隔,单位为毫秒 -->
1.  <context-param>
1.      <param-name>log4jRefreshInterval</param-name>
1.      <param-value>10000</param-value>
1.  </context-param>
1.  <listener>
1.      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
1.  </listener>
1.  
1.  <!-- 配置监听器 -->
1.  <listener>
1.      <listener-class>cn.baee.listener.IniListener</listener-class>  
1.  </listener>
1.  <listener>  
1.      <listener-class>cn.baee.listener.ReportsListener</listener-class>  
1.  </listener>
1.  <listener>
1.      <listener-class>cn.baee.listener.CountsListener</listener-class>  
1.  </listener>
1. </web-app>
1. 
1. struts.xml
1. <?xml version="1.0" encoding="UTF-8" ?>
1. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
1. 
1. <struts>
1.  
1.  <!-- 加载国际资源文件 -->
1.  <constant name="struts.custom.i18n.resources" value="cn.baee.config.langResource"></constant>
1.  
1.  <!-- 将Action的创建交给spring来管理 -->  
1.  <constant name="struts.objectFactory" value="spring" />
1.  
1.  <!-- 去掉struts2请求后缀  -->
1.  <constant name="struts.action.extension" value=","></constant>
1.  
1.  <package name="dd" namespace="/dd" extends="struts-default">
1.      <action name="*List?id=*" method="{1}" class="OrderActionBean" >
1.          <param name="id">{2}</param>
1.          <!--<param name="indexPage">{2}</param>-->
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.  </package>
1.  
1.  <package name="root" namespace="/" extends="struts-default">
1.      <!-- 用户中心 -->
1.      <action name="i" method="i" class="UserCenterActionBean">
1.          <result name="signin">/user_center/signin.jsp</result>
1.          <result name="welcome">/user_center/welcome.jsp</result>
1.          <result name="system">/user_center/system.jsp</result>
1.          <result name="order">/user_center/order.jsp</result>
1.      </action>
1.      <action name="UserCenter*" method="UserCenter{1}" class="UserCenterActionBean">
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">i</param>
1.          </result>
1.      </action>
1.      
1.      <!-- 控制中心 -->
1.      <action name="cc" method="cc" class="ControlCenterActionBean">
1.          <result name="signin">/control_center/signin.jsp</result>
1.          <result name="welcome">/control_center/welcome.jsp</result>
1.          <result name="system">/control_center/system.jsp</result>
1.          <result name="order">/control_center/order.jsp</result> <!-- 订单页 -->
1.          <result name="order_list">/control_center/order_list.jsp</result> <!-- 订单列表 -->
1.      </action>
1.      <action name="ControlCenter*" method="ControlCenter{1}" class="ControlCenterActionBean">
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.      <action name="ControlCenter*?id=*" method="ControlCenter{1}" class="ControlCenterActionBean">
1.          <param name="id">{2}</param>
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.      
1.      
1.      <!-- 订单 -->
1.      <action name="*Order?id=*;sn=*" method="{1}" class="OrderActionBean">
1.          <param name="id">{2}</param>
1.          <param name="sn">{3}</param>
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.      
1.      <action name="*List?indexPage=*" method="{1}" class="OrderActionBean" >
1.          <param name="indexPage">{2}</param>
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.      <!-- 订单列表 -->
1.      <action name="*OrderList?orderBusinessId=*;orderSourceTypeId=*;orderStateId=*;indexPage=*" method="{1}" class="OrderActionBean">
1.          <param name="orderBusinessId">{2}</param>
1.          <param name="orderSourceTypeId">{3}</param>
1.          <param name="orderStateId">{4}</param>
1.          <param name="indexPage">{5}</param>
1.          <result name="success" type="redirectAction">
1.              <param name="actionName">cc</param>
1.          </result>
1.      </action>
1.      
1.  </package>
1.  
1.  <!-- BAEE Action -->
1.  <package name="baee" namespace="/Be" extends="struts-default">
1.      <action name="SiteInitialize" method="Site" class="InitializeActionBean"></action>
1.      <action name="PageInitialize?pageAction=*;errorTextCode=*;illegalTextCode=*" method="Page" class="InitializeActionBean">
1.          <param name="pageAction">{1}</param>
1.          <param name="errorTextCode">{2}</param>
            <param name="illegalTextCode">{3}</param>
            <result name="success" type="dispatcher">
                <param name="location">/cc</param>
            </result>
        </action>
        <action name="BugInitialize" method="Bug" class="InitializeActionBean"></action>
    </package>
</struts>

action java

package cn.baee.action;
@SuppressWarnings("serial")
public class OrderAction extends GenericAction {
    private String id; // 订单Id
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void lalad() throws Exception {
        System.out.println("lalad()被执行到了" + this.getId());
        //return null;
    }
}



问题描述:
(1)<s:action name="laladList?id=2" executeResult="true" namespace="/dd"/>
(2)http://localhost:8080/baee/dd/laladList?id=2
执行(1)语句的时候没有任何问题,控制台输出了相应的东西,表示我的配置没有任何问题可以正常运行。
执行(2)直接在浏览器访问这个网址的时候却出现了上面的异常,控制台也没有输出,表示根本没有到Acion的这个方法里。
我要实现的效果是利用标签访问Action我指定的这个方法并且可以动态传递参数给它,所有我直接编写了绝对路径去访问这个Action 但是不行,我就很疑惑了,百度了一圈还是解决不了。
附加:如果我没传递任何参数、类似于直接访问(http://localhost:8080/baee/dd/laladList)是可以正常运行的,但是我动态传递了参数进去 就是出现上面的404 找不到这个ACTION的异常。

疑惑1:我思考了半天就是不解了,(1)(2)按理说执行的都是一模一样的东西,连参数都是一样的 为什么在<s:action>就能成功执行呢?难道就因为它指定了一个namespace?
疑惑2:在疑惑1基础上,既然是因为没有指定namespace那么为什么没有带任何参数的时候,两种访问都能成功的访问到我指定的Action的指定方法()呢?

求大神帮解决。。。。

10个回答

caozhy
caozhy   Ds   Rxr 2015.07.14 15:14

这个问题好像昨天有人问了。

参考下:http://blog.csdn.net/xh16319/article/details/8042285

dcxy0
dcxy0   Ds   Rxr 2015.07.14 15:25

配置的问题,检查一下struts2的配置文件.,

se7en_q
se7en_q   2015.07.14 15:44

会不会第一种他是用post的方式传递参数,而第二种是用get方式来传递参数的原因呀?

u010350563
u010350563   2015.07.14 15:22

我的文件都已经帖出来了,能帮我看下具体是那里出了问题吗? 我自己都检查了不知道多少遍了。。

wenpinglaoyao
wenpinglaoyao   2015.07.14 23:40

楼主使用的是什么语言?

zengyang105
zengyang105   2015.07.16 21:10

java 吧 404多半是路径没有配置正确吧

qq_28394425
qq_28394425   2015.07.17 11:00

我感觉吧,可能是你action的名字起得和get方法的url一样,浏览器识别成laladList了,你换个名字或者价格.action后缀试试,话说你起这么个名字id还能传进来值咋着。。

qq_28394425
qq_28394425 没注意你之前的代码,你的action既然写成了传值的,不一定非要按照get的格式来啊
2 年多之前 回复
quasimodo_es
quasimodo_es   2016.09.19 19:15

点击 s:action name="laladList?id=2" 的时候,看一下浏览器请求的路径,比较一下就行了,
如果是一样的,那就真怪了!

lv5751394
lv5751394   2016.09.23 16:47

命名空间写错了,检查下命名空间的命名问题

YangMing_number
YangMing_number   2016.09.30 13:45

namespace="/dd" 下面没有发现action 看看 是不是action的名字写错了

Csdn user default icon
上传中...
上传图片
插入图片