Struts2注释(Convention Plugin)

时间:2011-09-29 07:01:37

标签: java struts2 annotations

我遇到struts2注释的奇怪问题,让我先详细说明

@Results({
    @Result(name = "input", location = "main.jsp"),
    @Result(name = "list", location = "list.jsp")
})
public class MainAction extends ActionSupport {

    private PortalUser user;

    @Autowired
    private PortalUserService portalUserService;

    public String execute() throws Exception {
        return INPUT;
    }

    @Action("addUser")
    public String addUser() throws Exception {
        portalUserService.addUser(user);
        return listUser();
    }

    @Action("listUser")
    @SkipValidation
    public String listUser() throws Exception {
        List theUserList = portalUserService.getPortalUserList(null);
        ServletActionContext.getRequest().setAttribute("userList", theUserList);
        return "list";
    }

    @Action("modifyUser")
    public String modifyUser() throws Exception {
        List theUserList = portalUserService.getPortalUserList(null);
        ServletActionContext.getRequest().setAttribute("userList", theUserList);
        return "list";
    }

    public void validate() {
        if (user != null && StringUtils.isBlank(user.getUserName()))
            addFieldError("accountBean.userName", "User name is required.");
        System.out.println("validate @@@@@");
    }

    public PortalUser getUser() {
        return user;
    }

    public void setUser(PortalUser user) {
        this.user = user;
    }
}

这是struts2动作类,我正确配置它并输入url

  • http://domain/listUser它会列出所有用户
  • http://domain/modifyUser它可以修改用户

使用爆炸的类文件在tomcat中一切顺利

但是当我使用war文件构建并将其部署到tomcat webapp文件夹时,页面报告 没有动作名称listUser。

两种方案之间的区别在于我编译的爆炸类文件和归档类文件,并将操作和其他类文件包装到其中。

我对这种现象感到困惑。

所以任何建议和意见都将非常感谢!

2 个答案:

答案 0 :(得分:0)

我按照以下方法进行实验并得出结论:使用struts2注释,动作类不能移动到jar文件中,它必须位于WEB-INF / classes中

我承认struts2约定会扫描特定包中的action类,所以我只留下WEB-INF / classes /.../ action文件夹中的action类,jar其他类文件并将其放入WEB-INF / lib,它已经完成了

答案 1 :(得分:0)

默认情况下,插件不会扫描jar或类路径,只能扫描WEB-INF / classes。您可能希望看到该插件的Configuration Reference并查找值 struts.convention.action.includeJars ,它可以让您列出您也想要的广告寻找文件。