Undefined actionnamespace parameter

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章