2010-06-17 60 views
1

我在Seam中執行了一系列Web操作來執行創建,讀取,更新等操作。對於我的讀取/更新/刪除操作,我想要有個別操作類,它們都擴展了一個抽象基類。我想將@Factory方法放在抽象基類中以檢索要執行的項目。例如,我有這個基類:在抽象基類中的Seam @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,而不會包含這些錯誤?

回答

2

您遇到的問題是每個Seam組件都需要一個唯一的名稱 - 使用您的方法,您將爲每個子類創建一個名爲「item」的組件。

我會做到以下幾點:

@Name("action1") 
public class Action1 extends BaseAction 
{ 
    ... 
} 

而且在components.xml:

<factory name="action1Item" value="#{action1.item}" /> 
+0

因此,換句話說,我需要向下移動@Factory到子類和名稱項不同的是,與將其拉入基類相反。正確? – Shadowman 2010-06-17 19:13:54

+0

是的 - 你採取的任何方法只需確保組件名稱是唯一的。 – mtpettyp 2010-06-17 19:18:41