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是拦截不到这个请求的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值