【发布时间】:2011-07-20 17:16:50
【问题描述】:
有没有办法让 struts2 约定插件使用超类的结果?
我正在尝试创建一个通用 CRUD,如果子类中没有实现,则使用通用结果。这可能吗?
【问题讨论】:
标签: java inheritance struts2
有没有办法让 struts2 约定插件使用超类的结果?
我正在尝试创建一个通用 CRUD,如果子类中没有实现,则使用通用结果。这可能吗?
【问题讨论】:
标签: java inheritance struts2
是的,你可以。
举个例子:
常规 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;
}
*/
}
【讨论】:
它不是 Struts2 的工具。可以建造这样的设施,但还有其他方法可以产生您正在寻找的效果。
我建议此时使用通配符映射。它可以满足您的需求,并且可以与约定插件很好地配合使用(struts.xml 规则优先于约定)。特定于操作的注释或 xml 优先于通配符映射。换句话说,它按您期望的方式工作,只需尝试一下即可。
这样的事情确实是我发帖的原因:Is it possible to use wildcard method invocation in Struts2 with conventions plugin using only annotations? 虽然我在想也许包级别的注释可以完成通配符的工作。无论如何,最终结果将类似于您想要对超类执行的操作。
【讨论】: