@支持bean的getter和setter中的ManagedProperty



根据本文,我已经将@ManagedProperty(value="#{settings}")实现到我的backingbean:

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();
  }
}

设置.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(ajax调用setPerson_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 setter,它会被捕获("NOT FOUND")

我做错了什么?

您的问题看起来非常令人困惑。您首先显示一些bean代码,然后立即说"我认为这是一个ajax问题",甚至在提到任何类型的问题之前。剩下的问题也没什么不同。

直接回答你问题的最后一部分:

我不明白,为什么它找到项目并将正确的名称写入控制台,然后立即写入未找到的捕获异常。。。。????

您正在静态访问Settings。您在类级别声明的实例似乎毫无用处。完全有可能的是,如果Tools.find抛出异常,因此没有分配新值,那么静态Settings.PWKITEM字段中仍然有一个旧值。这一点也不奇怪。

请注意,日志是从上到下读取的。所以,并不是打印"***"然后抛出异常,而是先抛出异常,然后打印"未找到",然后才打印出"***"。

此外,您处理所有这些问题的方法看起来也有问题。声明一个实体也是一个(JSF)支持bean并不是一个好主意。在实体中使用对某种服务或DAO类的引用也并不总是一个好主意,但在一个本应是ID的简单设置器的方法中这样做看起来是错误的。

那么使用静态引用就更加错误了,最重要的是,在方法和非静态变量名中使用下划线违反了常见的Java代码约定。

相关内容

  • 没有找到相关文章

最新更新