<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="struts2" namespace="/" extends="struts-default">
<global-results>
<result name="usernameInvalid">/usernameInvalid.jsp</result>
<result name="passwordInvalid">/passwordInvalid.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="usernameInvalid" exception="com.lj.exception.UsernameException"></exception-mapping>
<exception-mapping result="passwordInvalid" exception="com.lj.exception.PasswordException"></exception-mapping>
</global-exception-mappings>
<action name="login" class="com.lj.struts2.LoginAction">
<result name="success" type="redirect">/result.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="login2" class="com.lj.struts2.LoginAction2">
<result name="success">/result.jsp</result>
</action>
<action name="userAction" class="com.lj.struts2.UserAction">
<result name="success">/output.jsp</result>
</action>
<action name="userAction2" class="com.lj.struts2.UserAction2">
<result name="success">/output.jsp</result>
</action>
<action name="register" class="com.lj.struts2.RegisterAction" method="myExecute">
<result name="success">/registerResult.jsp</result>
<result name="input">/register.jsp</result>
</action>
<action name="action1" class="com.lj.struts2.Action1" >
<result name="success" type="redirectAction">
<span style="WHITE-SPACE: pre"></span><span style="BACKGROUND-COLOR: #ffff00"><!--在下面这一行总是出现 Undefined actionnamespace parameter--></span>
<param name="actionName">action2</param>
<param name="username">${username}</param>
<param name="password">${password}</param>
<param name="usernameAndPassword">${usernameAndPassword}</param>
</result>
<interceptor-ref name="theInterceptor1"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="action2" class="com.lj.struts2.Action2">
<result name="success">/action2.jsp</result>
</action>
</package>
</struts>
因为涉及到action之间的跳转,为了不引起混乱和尽快找到相应的action必须为该package指定namespace,所以需要改为如下的形式方能正常工作:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="struts2" namespace="/struts2" extends="struts-default">
<global-results>
<result name="usernameInvalid">/usernameInvalid.jsp</result>
<result name="passwordInvalid">/passwordInvalid.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="usernameInvalid" exception="com.lj.exception.UsernameException"></exception-mapping>
<exception-mapping result="passwordInvalid" exception="com.lj.exception.PasswordException"></exception-mapping>
</global-exception-mappings>
<action name="login" class="com.lj.struts2.LoginAction">
<result name="success" type="redirect">/result.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="login2" class="com.lj.struts2.LoginAction2">
<result name="success">/result.jsp</result>
</action>
<action name="userAction" class="com.lj.struts2.UserAction">
<result name="success">/output.jsp</result>
</action>
<action name="userAction2" class="com.lj.struts2.UserAction2">
<result name="success">/output.jsp</result>
</action>
<action name="register" class="com.lj.struts2.RegisterAction" method="myExecute">
<result name="success">/registerResult.jsp</result>
<result name="input">/register.jsp</result>
</action>
<action name="action1" class="com.lj.struts2.Action1" >
<result name="success" type="redirectAction">
<param name="namespace">/struts2</param>
<param name="actionName">action2</param>
<param name="username">${username}</param>
<param name="password">${password}</param>
<param name="usernameAndPassword">${usernameAndPassword}</param>
</result>
<interceptor-ref name="theInterceptor1"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="action2" class="com.lj.struts2.Action2">
<result name="success">/action2.jsp</result>
</action>
</package>
</struts>
这时候前台提交代码也必须要指定相应的namespace,具体如下:
<form action="action1" namespace="/struts2">
username: <input type="text" name="username" /><br>
password: <input type="password" name="password" /><br>
<input type="submit" value="提交" />
</form>
要注意action部分是action="login" 而不是 action="login.action"
虽然我web.xml的过滤器是这样子写的:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
由此可以看出,
1,当在提交表单的时候指定namespace时,后面的.action就不需要添加了,原因是当这个表单提交到相应的namespace="/struts2"时,就已经被struts拦截器所捕获,所以就不需要添加.action了。
2,如果要是我要提交的表单没有指定属于struts拦截范围的namespace,这个时候就需要用action="action1.action"了,否则,struts是拦截不到这个请求的。