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

标签 java jsf richfaces

根据this article ,我已经为我的支持 bean 实现了 @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(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 问题”,甚至在提及任何类型的问题之前。问题的其余部分没有太大不同。

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

Ican't understand, why it find the item an writes the correct name to console, and immediatelly after that, it writes catch exception not found....????

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

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

此外,您处理所有这些问题的方法看起来有问题。将实体声明为 (JSF) 支持 bean 很少是一个好主意。在实体中使用对某种 Service 或 DAO 类的引用并不总是一个好主意,但在一个被认为是简单的 ID setter 的方法中执行此操作看起来就是错误的。

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

关于java - 支持 bean 中的 @ManagedProperty - 设置 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166330/

相关文章:

Java 应用程序服务器和 JVM

java - 使用 Java 在循环中获取输入

java - GSON反序列化复杂对象数组

java - a4j :commandLink with onClick return true or false not properly working

java - Spring Security OAuth2不会终止 session 并再次显示登录

css - 使用 p :inplace in PrimeFaces

JSF/PrimeFaces : Navigate from one tab to another

java - Primefaces:ajax 导航和 dataTable 复选框选择

javascript - 如何防止没有管理员访问权限的用户在 faces 中保存具有特定状态的表单

css - <富 :fileUpload> CSS customization: Don't need '+' symbol in button