@ManagedProperty в бэк-бине - установка методов получения и установки - PullRequest
0 голосов
/ 29 мая 2011

Согласно этой статье , я реализовал @ManagedProperty(value="#{settings}") для моего бина:

BEAN Bde.java:

@Entity
@Table(name="bdeDATA")
@ViewScoped
@ManagedBean(name="BDE")
public class Bde implements Serializable
{
  /**/
  private static final long serialVersionUID = -705775502999920673L;

  @Transient
  @ManagedProperty(value = "#{settings}")
  private Settings settings;

  @Id
  private Date create_date;
  private Integer person_ID;

  public Date getCreate_date() {
    return create_date;
  }
  public void setCreate_date(Date create_date) {
    this.create_date = create_date;
  }
  public Integer getPerson_ID() {
    return person_ID;
  }
  public void setPerson_ID(Integer person_ID) {
    this.person_ID = person_ID;

    try 
    {
      Settings.PWKITEM = (Pwk)Tools.find(person_ID);
      if (Settings.PWKITEM != null) settings.setUserfound(true); /// PROBLEMATIC
    }
    catch (Exception e)
    {
      Tools.setErrorMessage("NOT FOUND "+e.getMessage());
    }
  }

  // ManagedProperty settings ---------------------------------------------  
  public Settings getSettings() {
    return settings;
  }
  public void setSettings(Settings settings) {
    this.settings = settings;
  }
  public void setUserfound (boolean userfound){
    settings.setUserfound(userfound);
  }
  public boolean isUserfound() {
    return settings.isUserfound();
  }
}

Settings.java

@SessionScoped
@ManagedBean(name="settings")
public class Settings implements Serializable
{
  /**/
  private static final long serialVersionUID = 8613411699115714416L;

  public static Pwk PWKITEM = new Pwk(); 
  private boolean userfound = false;  

  public boolean isUserfound() {
    return userfound;
  }
  public void setUserfound(boolean userfound) {
    this.userfound = userfound;
  }
}

XHTML (набор вызовов ajaxPerson_ID):

<h:inputText id="persId" value="#{bean.bdeitem.persId}">
  <f:ajax event="blur" render="name" execute="@this" />
</h:inputText>
<h:inputText id="name" value="#{bean.pwkitem.name}"/>

Проблема в try/catch:

  • без условия, объект найден.
  • когда я изменяю условие, например, на if (Settings.PWKITEM != null) System.out.println("HELLO"), HELLO записывается в консоль.
  • если я пытаюсь добавить установщик userfound, он перехватывается («НЕ НАЙДЕНО»).

Что я делаю не так?

1 Ответ

2 голосов
/ 29 мая 2011

Ваш вопрос выглядит серьезно запутанным.Сначала вы показываете некоторый код компонента, а затем сразу же говорите: «Я думаю, что это проблема ajax», прежде чем даже упомянуть какую-либо проблему.Остальная часть вопроса мало чем отличается.

Чтобы напрямую ответить на последнюю часть вашего вопроса, хотя:

Я не могу понять, почему он находит элемент и пишет правильныйимя в консоль, и сразу же после этого пишет исключение catch не найдено .... ????

Статический доступ к Settings.Экземпляр, который вы объявили на уровне класса, кажется бесполезным.Вполне возможно, что если Tools.find выдает исключение и, следовательно, не назначается новое значение, в статическом поле Settings.PWKITEM все еще остается старое значение.В этом нет ничего странного.

Обратите внимание, что журнал читается сверху вниз.Таким образом, это не значит, что «***» печатается, а затем генерируется исключение, но сначала генерируется исключение, и печатается «Not Found», и только после этого печатается «***».

ДополнительноВаш подход ко всему этому выглядит проблематично.Объявление сущности также компонентом поддержки (JSF) редко является хорошей идеей.Использование ссылок на какие-либо классы Service или DAO изнутри сущности также не всегда является хорошей идеей, но делать это в методе, который, предположительно, является простым установщиком для идентификатора, выглядит просто неправильно.

Тогда использование статическогоссылки являются еще более неправильными, и если они выключены, использование подчеркивания в методах и именах нестатических переменных противоречит общепринятому соглашению по коду Java.

...