以下为struct.xml<package name="back" namespace="/all" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="success"> /WEB-INF/jsp/{1}/{1}_  {2}_success.jsp</result>
<result name="error"> /WEB-INF/jsp/{1}/{1}_{2}_error.jsp</result>
</action>
<action name="index">
  <result>/index.jsp</result> 
</action>
</package>如果这样配置,有个漏洞就是我访问:
http://localhost/项目/all/xxx
页面会出现错误,怎样避免这种错误,也就是怎样捕捉不存在的action?
我用了另一个package,设其的package为"",可是这样捕捉不到带有all的路径
使用<default-action-ref> 是不管用的,只有在namespace为"/"的情况下这个所谓的<default-action-ref> 才管用。真晕。

解决方案 »

  1.   

    怎样避免这种错误,也就是怎样捕捉不存在的action? 在web.xml中
     <error-page>
      <error-code>404</error-code>
      <location>/error.html</location>
      </error-page>
      

  2.   

    <package name="base" extends="struts-default">
            <default-action-ref name="index"></default-action-ref>
            <action name="index">
              <result>/index.jsp</result> 
            </action>
    </package><package name="back" namespace="/all" extends="base">
            <action name="*_*" class="action.{1}Action" method="{2}">
                <result name="success"> /WEB-INF/jsp/{1}/{1}_  {2}_success.jsp</result>
                <result name="error"> /WEB-INF/jsp/{1}/{1}_{2}_error.jsp</result>
            </action>
    </package>
      

  3.   


    我想问的是我试过的,没效果,我想问的是假如我有很多个package ,我都希望可以适用到这个default-action-ref,这个default-action-ref也许在这么多个package里面都跳到同一个default-action,那我肯定是不希望在每个package里面都定义一个,那之后的想法肯定是写一个package name="default" 写下这个action啦,之后在里面写default-action-ref,其他的package就继承这个package,并且其他的package都不写这default-action-ref,但这个想法是不行的,我试着将default-action-ref写到低下的package,不写在default的package,这也是不行,这个default-action-ref必须在两大类的package里面都要写如default-action-ref,但struts2不是在底层的namespace找不到url的里面写的action就会跳到上一层吗,那按道理,我只要在default-package里面写入default-action-ref就可以吗?如果两大类的package里面都有必要写入default-action-ref的话那不是也算是小小的冗余吗?