【问题标题】:@Result at class level and method level@Result 在类级别和方法级别
【发布时间】:2016-02-07 09:51:47
【问题描述】:

我正在关注 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)注释从类级别移动到方法级别:

@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  

为什么会这样?

【问题讨论】:

  • 您的配置中为struts.enable.SlashesInActionNames 设置了什么?只需从动作名称中删除前导斜杠,它就会起作用 -> @Action(value="welcome".
  • 用这个其他解决方案@AleksandrM回答问题

标签: java struts2 annotations struts-action struts2-convention-plugin


【解决方案1】:

因为 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班级级别

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

【讨论】:

  • 谢谢你安德里亚 Ligios!
猜你喜欢
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多