1

我正在关注 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;
    }
}

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

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

@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没有找到。

我的 JSP 在

/WebContent/User/pages  

为什么会这样?

4

1 回答 1

1

因为 Struts2 会在

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级别:

@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 的示例仅适用于课堂级别的注释,我正在等待更专家来满足我们的好奇心;同时,这应该是您所需要的。

于 2015-11-06T13:54:03.383 回答