使用继承的Struts2 Convention插件结果

时间:2011-07-20 17:16:51

标签: java inheritance struts2

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

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

2 个答案:

答案 0 :(得分: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 的注释将始终有效,除非它在子类中被覆盖。

e.g。

@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;
    }

    */
}

答案 1 :(得分:0)

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

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

这样的事情真的是我发布的原因:Is it possible to use wildcard method invocation in Struts2 with conventions plugin using only annotations?虽然我想的是也许包装级注释可以完成外卡的工作。无论如何,最终结果将类似于你想要用超级类做的事情。