`

structs2There is no Action mapped for namespace / and action name..问题

阅读更多

"There is no Action mapped for namespace / and action name XXX" 估计是struts2入门都会遇到的问题

简单的总结一下今天的问题:

1.把struts.xml文件放在了WEB-INF文件夹里了,这是Struts1.x的思维定势,尽管资料上明确地指明要放在WEB-INF/classes文件里(也就是myeclipse的src文件下)

2.namespace属性的设置问题:这个属性在pakage和<s:form>中都有,如果是在struts.xml文件中的pakage的属性namespace上设置了,那么在写<s:form>的action时就要写成:namespace的属性+action或者namespace的属性/../action的名称(不需加后缀),介于namespace和action名之间可以有其他路径。举个例子:若你的struts.xml的文件如下配置,请留意namespace属性

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

    <package name="struts2" namespace="/check"  extends="struts-default">
        <action name="login" class="com.cetus.web.struts.LoginAction" >
            <result name="failure">/erro.jsp</result>
            <result name="success">/index.jsp</result>
        </action>
    </package>

   然后是登陆界面的<s:form>

    <s:form action="/check/login" method="POST" >

  <s:textfield name="username" label="用户名"></s:textfield>
  <s:textfield name="pwd" label="密码"></s:textfield>
  <s:submit value="登录"></s:submit>
  </s:form>

    <s:form>的namespace属性可写可不写,试了试乱写都没报错呢....因为配置了pakage的namespace的属性,<s:form>的action就可以配置为:action="check/login"或者action="check/a/login"等,struts在寻找action时会在namespace下的文件夹逐个找 直到找到为止。  

 

综上所述:注意namespace的用法,不配置的话,action的路径怎么写都可以,但最后的斜干后必须是动作名,如果配置了的话<s:form>的action属性就必须是namespace属性+中间可以加多级的路径也可以不加+动作名.

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics