Шов @ Завода в абстрактном базовом классе? - PullRequest
1 голос
/ 17 июня 2010

У меня есть серия веб-действий, которые я реализую в 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 в базовом классе, не путая эти ошибки?

1 Ответ

2 голосов
/ 17 июня 2010

Проблема, с которой вы сталкиваетесь, заключается в том, что каждому компоненту Seam требуется уникальное имя - при вашем подходе у вас будет компонент с именем "item" для каждого подкласса.

Я бы сделал следующее:

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

А в компонентах .xml:

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