繁体   English   中英

支持 bean 中的 @ManagedProperty - 设置 getter 和 setter

[英]@ManagedProperty in backing bean - setting getters and setters

根据这篇文章,我已经在我的支持 bean 中实现了@ManagedProperty(value="#{settings}")

豆 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中:

  • 如果没有条件,则找到 object。
  • 例如,当我将条件更改为if (Settings.PWKITEM.= null) System.out.println("HELLO")时, HELLO被写入控制台。
  • 如果我尝试添加userfound设置器,它会被捕获(“未找到”)。

我做错了什么?

你的问题看起来很混乱。 您首先显示一些 bean 代码,然后立即说“我虽然这是一个 ajax 问题”,甚至在提及任何类型的问题之前。 问题的rest 差别不大。

不过,要直接回答您问题的最后一部分:

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

您正在静态访问Settings 您在 class 级别声明的实例似乎没用。 如果Tools.find抛出异常并因此没有分配新值,则完全有可能在 static Settings.PWKITEM字段中仍然存在旧值。 这没有什么奇怪的。

请注意,日志从上到下读取。 所以不是先打印“***”再抛出异常,而是先抛出异常再打印“Not Found”,之后才打印“***”。

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

然后使用 static 引用更加错误,如果关闭,在方法和非静态变量名称中使用下划线违反常见的 Java 代码约定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM