【问题标题】:Struts2 Convention Plugin Results Using Inheritance使用继承的 Struts2 约定插件结果
【发布时间】:2011-07-20 17:16:50
【问题描述】:

有没有办法让 struts2 约定插件使用超类的结果?

我正在尝试创建一个通用 CRUD,如果子类中没有实现,则使用通用结果。这可能吗?

【问题讨论】:

    标签: java inheritance struts2


    【解决方案1】:

    是的,你可以。

    举个例子:

    常规 CRUD

    @Results({
            @Result(name = "input", location = "input.jsp"),
            @Result(location = "input.jsp")
    })
    public abstract class CrudActionSupport extends ActionSupport {
    
        @Action("update/{entityId}") // wildcard mapping
        public String actionUpdate() {
            return SUCCESS;
        }
    }
    

    动作

    public class PersonAction extends CrudActionSupport {
    
    }
    

    CrudActionSupport 处的注释将始终有效,除非它在子类中被覆盖。

    例如

    @Results({
            @Result(name = "input", location = "person.jsp"),
            @Result(location = "person.jsp")
    })
    public class PersonAction extends CrudActionSupport {
    
        @Override
        public String actionUpdate() {
            return SUCCESS;
        }
    
        // or 
    
        /*
    
        @Action("update/{id}")
        @Override
        public String actionUpdate() {
            return SUCCESS;
        }
    
        */
    }
    

    【讨论】:

      【解决方案2】:

      它不是 Struts2 的工具。可以建造这样的设施,但还有其他方法可以产生您正在寻找的效果。

      我建议此时使用通配符映射。它可以满足您的需求,并且可以与约定插件很好地配合使用(struts.xml 规则优先于约定)。特定于操作的注释或 xml 优先于通配符映射。换句话说,它按您期望的方式工作,只需尝试一下即可。

      这样的事情确实是我发帖的原因:Is it possible to use wildcard method invocation in Struts2 with conventions plugin using only annotations? 虽然我在想也许包级别的注释可以完成通配符的工作。无论如何,最终结果将类似于您想要对超类执行的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多