Struts 2注释问题在于行动

时间:2013-03-02 07:06:42

标签: struts2

我使用Struts2 Annotation

我的web.xml是:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我的JSP是:

      <s:form action="test" method="post">
            <s:textfield name="id" label="Id"></s:textfield>        
            <s:submit value="Submit"></s:submit>
     </s:form>

我的课程是:

      @Namespace("/")
      public class Test extends ActionSupport {

  private static final long serialVersionUID = 1L;

      @Action(value = "test", results = { @Result(name = "success", location =     "success.jsp") })
      public String input() {

         System.out.println("input call");
         return SUCCESS;
     }

 }

我收到了错误:

HTTP Status 404 - There is no Action mapped for namespace / and action name test.

文件夹结构:

my folder structure is

3 个答案:

答案 0 :(得分:3)

执行以下操作。

将您的Test操作放在一个名为“com.mydomain.action”的包中,第一部分可以是您想要的但它必须以“.action”结尾struts2-conventions将获取您的操作。如果还有其他软件包,例如:“com.mydomain.action.here”,则“action”后面的包将被解释为struts2名称空间。

请将“success.jsp”重命名为“test.jsp”并将其移至:“/ WEB-INF / content / test.jsp”,/ WEB-INF / content是默认命名空间中的操作将具有的视图已解决。对于/ here包,视图需要放在/ WEB-INF / content / here

让我们重写您的测试操作以保持约定默认值:

public class Test extends ActionSupport {
   private static final long serialVersionUID = 1L;
   public String execute() {
         System.out.println("input call");
         return SUCCESS;
   }
 }

要注意的其他事项。你可以调用你的视图test-success.jsp而不仅仅是test。这是因为约定首先查看具有从附加到Action名称的操作返回的String的视图,在这种情况下是测试。

同样,虽然类是骆驼案例:MyMagicTest对这样一个动作类的看法是my-magic-test.jsp

现在注释适用于:

现在您知道在没有xml OR注释的情况下可以做很多事情...约定会在需要时使用注释来覆盖默认值。你这样做是为了采取捷径,因此注释表示一个例外情况。不要用它们来定义开箱即用的公约。

有关约定的更多信息,请参阅:https://cwiki.apache.org/WW/convention-plugin.html我强烈建议您完全查看,以便了解许多可能的功能。

答案 1 :(得分:0)

  
There is no Action mapped for namespace "xxx" and action name "yyy" 

是初学者在配置操作流时开始使用Struts2的常见错误。要摆脱此错误,您需要将URL正确映射到操作方法。

在Struts2中,肯定每个动作都映射到某个方法。但是,您应该将显式映射到操作方法的操作与默认情况下隐式映射到方法execute()的操作区分开来。

网址格式存在差异。如果使用DMI,则可以使用感叹号在URL中映射方法名称,并将发布的方法分派给操作。或者您可以使用下面的方法属性

<s:submit value="Submit" method="input"/>    

如果您使用的是常规插件和注释,请确保您没有使用XML配置和注释双重配置您的操作。第一个优先级并覆盖配置。因此,摆脱struts.xml中映射的任何操作,并对操作,方法和包应用注释。

不幸的是,并非所有IDE都通过插件支持Struts2注释配置,但是您仍然可以在单独的struts-xxx.xml配置中使用双配置映射,您可以为IDE提供但不包括在主struts.xml

答案 2 :(得分:0)

我意识到这是一个老问题,但我最近遇到了这个问题并使用以下方法解决了它,所以我想我会在这里记录它。

我解决它的方法是将java类 - 在你的情况下放在Test.java中 - 放在名为&#34; actions&#34;的程序包中。而不是将其留在默认包中。

还记得将execute函数设为public并删除struts.xml。