无法在Struts 2中使用注释调用操作

时间:2015-04-12 02:51:55

标签: struts2 annotations struts2-convention-plugin

这是我的动作类:

FirstAction.java

 @Namespace(value = "/User")
 public class FirstAction extends ActionSupport {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Action(value = "run4", results = { @Result(name = "task1", location = "task1.jsp") })
private String task1() {
    return "task1";
}

@Action(value = "run5", results = { @Result(name = "task2", location = "task2.jsp") })
private String task2() {
    return "task2";
}

@Action(value = "run6", results = { @Result(name = "task3", location = "task3.jsp") })
private String task3() {
    return "task3";
}
}

SecondAction.java

 @Namespace(value = "/Admin")
public class SecondAction extends ActionSupport {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Action(value = "run1", results = { @Result(name = "task1", location = "task1.jsp") })
private String task1() {
    return "task1";
}

@Action(value = "run2", results = { @Result(name = "task2", location = "task2.jsp") })
private String task2() {
    return "task2";
}

@Action(value = "run3", results = { @Result(name = "task3", location = "task3.jsp") })
private String task3() {
    return "task3";
}
}

struts.xm

 <struts>
    <constant name="struts.action.extension" value="html" />
    <package name="default" extends="struts-default"></package>
</struts>

web.xml

<welcome-file-list>
   <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
    <param-name>actionPackages</param-name>
    <param-value>com.sem4.actions</param-value>
</init-param>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Session Config -->
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

这是redirect.jsp

 <div>
      <a href='<s:url action="run1" namespace="Admin"></s:url>'>Action run1, namespace Admin</a>
        <br> 
        <a href='<s:url action="run2" namespace="Admin"></s:url>'>Action run2, namespace Admin</a> 
        <br> 
        <a href='<s:url action="run3" namespace="Admin"></s:url>'>Action run3, namespace Admin</a>
 </div>
 <div>
      <a href='<s:url action="run4" namespace="User"></s:url>'>Action run1, namespace User</a> 
        <br> 
        <a href='<s:url action="run5" namespace="User"></s:url>'>Action run2, namespace User</a>
        <br> 
         <a href='<s:url action="run6" namespace="User"></s:url>'>Action run3, namespace User</a>
 </div>

我的图书馆:

  antlr-2.7.6.jar
  commons-collections-3.1.jar
  commons-fileupload-1.2.1.jar
  commons-io-1.3.2.jar
  commons-lang-2.3.jar
  commons-logging-1.1.jar
  dom4j-1.6.1.jar
  ejb3-persistence.jar
  freemarker-2.3.13.jar
  hibernate-annotations.jar
  hibernate-commons-annotations.jar
  hibernate-validator.jar
  hibernate3.jar
  hsqldb.jar
  javassist-3.9.0.GA.jar
  jta-1.1.jar
  junit-3.8.1.jar
  log4j-1.2.15.jar
  mysql-connector-java-5.0.7-bin.jar
  ognl-2.6.11.jar
  slf4j-api-1.5.8.jar
  slf4j-log4j12-1.5.8.jar
  struts2-convention-plugin-2.1.6.jar
  struts2-core-2.1.6.jar
  struts2-fullhibernatecore-plugin-1.4-GA.jar
  xwork-2.1.2.jar

当我点击redirect.jsp中的链接来调用操作时,例如:名称空间run4中的调用操作"User",它正在抛出

  HTTP Status 404 - There is no Action mapped for namespace /User and action name run4

我正试图找到导致错误的原因,但看起来我的代码很好。

1 个答案:

答案 0 :(得分:0)

操作方法应为public。 Struts2不允许在private方法上映射动作,例如

@Action(value = "run4", results = { @Result(name = "task1", location = "task1.jsp") })
public String task1() {
    return "task1";
}

此外,没有必要编写注释来通过约定插件配置操作。它已经创建了一个可以按惯例使用的配置。您可以查看文档page以了解如何使用此配置。