<?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是攔截不到這個請求的。