我已经在Seam中实现了一系列Web动作来执行创建,读取,更新等操作。对于我的读取/更新/删除操作,我希望有各自的操作类,它们都扩展了抽象基类。我想将@Factory方法放在抽象基类中以检索要对其执行操作的项。例如,我把它作为基类:
public abstract class BaseAction {
@In(required=false)@Out(required=false)
private MyItem item=null;
public MyItem getItem(){...}
public void setItem(...){...}
@Factory("item")
public void initItem(){...}
}
我的子类会扩展BaseAction,所以我不必重复逻辑来加载要查看,删除,更新等项目。但是,当我启动我的应用程序时,Seam抛出错误说我有为同一个对象声明了多个@ Factory。
这有什么办法吗?有没有办法在基类中提供@Factory而不会包含这些错误?
答案 0 :(得分:2)
您遇到的问题是每个Seam组件都需要一个唯一的名称 - 使用您的方法,每个子类都有一个名为“item”的组件。
我会做以下事情:
@Name( "action1" )
public class Action1 extends BaseAction
{
...
}
在components.xml中:
<factory name="action1Item" value="#{action1.item}" />