@Result 在 class 级别和方法级别

@Result at class level and method level

我正在学习 Mkyong 的 Struts 2 Hello World Annotation Example 教程:

@Namespace("/User")
@ResultPath(value="/")
@Action(value="/welcome", 
      results={@Result(name="success", location="pages/welcome_user.jsp")})
public class WelcomeUserAction extends ActionSupport {

    public String execute(){
        return SUCCESS;
    }
}

访问 URL http://localhost:8080/project_name/User/welcome 工作正常。

现在我正在尝试将 @Action(以及因此的 @Result)注释从 class 级别移动到方法级别:

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

    @Action(value="/welcome", 
          results={@Result(name="success", location="pages/welcome_user.jsp")})     
    public String execute(){
        return SUCCESS;
    }
}

但是在这样做之后,我得到了 404 错误:

/project_name/pages/welcome_user.jsp is not found.

我的 JSP 在

/WebContent/User/pages  

为什么会这样?

因为 Struts2 将在

中查找您的 JSP
WebContent/@ResultPath/@Namespace/@Result

而不是

@ResultPath("/")/@Namespace("/User")/@Result("pages/welcome_user.jsp")

您可以将 JSP 从

WebContent/User/pages/welcome_user.jsp

WebContent/pages/User/welcome_user.jsp

然后使用

@ResultPath("/pages")/@Namespace("/User")/@Result("welcome_user.jsp")

此时,以下两种配置都应该起作用:

@Action处于class水平:

@ResultPath(value="/pages")
@Namespace("/User")
@Action(value="/welcome", results={@Result(name="success", location="welcome_user.jsp")})
public class WelcomeUserAction extends ActionSupport {

    public String execute(){
        return SUCCESS;
    }
}

@Action 方法级别:

@ResultPath(value="/pages")
@Namespace("/User")
public class WelcomeUserAction extends ActionSupport {

    @Action(value="/welcome", results={@Result(name="success", location="welcome_user.jsp")})
    public String execute(){
        return SUCCESS;
    }
}

我不知道为什么 Mkyong 的示例只适用于 class 级别的注释,我正在等待更专业的人来满足我们的好奇心;同时,这应该是你需要的。