日期:2014-05-18  浏览次数:20757 次

struts2中通配符与默认action冲突!
    struts2  配置片段
    <package name="default" extends="struts-default">
        <default-action-ref name="pageNotFound"></default-action-ref>
        <action name="pageNotFound" class="com.TD.action.DefaultAction"></action>
    </package>
    <package name="login" namespace="/login" extends="default">
        <action name="*" class="com.TD.action.LoginAction" method="{1}"  >
            <result name="success_jsp">/success.jsp</result>
        </action>
    </package>
    当不使用通配符时(<action name="login" class="com.TD.action.LoginAction" method="login"  >),访问命名空间login下的不存在的action(http://localhost:8080/TD/login/asd.action),能正常被默认action捕获处理。
     但是使用了通配符后(<action name="*" class="com.TD.action.LoginAction" method="{1}"  >),再访问不存在的action时,页面会报struts500,控制台会报(  
    严重: Exception occurred during processing request:com.TD.action.LoginAction.asd()
    java.lang.NoSuchMethodException: com.TD.action.LoginAction.asd()
)。
     求解。

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

照你的配置  访问时的方法名要跟action名相同 

  
  我使用了默认action ,  
  
    当我的访问的方法(action)不存在时,  理论上应该由默认action(我的定义的)处理,
  
     也确实是这样的,
  
   但是我使用了通配符,之后, 我的默认action 就不起作用了


你自己看下报错  是找不到LoginAction里asd这个方法 并不是说Asd这个action
所以并没有进入到默认的action而是在LoginAction里找asd方法 



    对啊, 我知道啊, 但是为什么啊 

    我在没有配置通配符之前,访问asd()的时候,是可以进到默认的action , 

    但是我配置了通配符之后就不行了
   
     

用通配符之后,无论你在/login/后输入任意字符都默认走了com.TD.action.LoginAction这个类,也就是说<action name="pageNotFound" class="com.TD.action.Default