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

Java @支持bean设置的getter和setter中的ManagedProperty,java,jsf,richfaces,Java,Jsf,Richfaces,根据,我已经对我的支持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 = -705775502999

根据,我已经对我的支持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\u ID):


问题出在
try/catch

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

我做错了什么?

你的问题看起来很令人困惑。您首先展示一些bean代码,然后立即说“我认为这是一个ajax问题”,甚至在提到任何类型的问题之前。问题的其余部分没有太大不同

要直接回答问题的最后一部分,请执行以下操作:

我不明白,为什么它会找到条目,并将正确的名称写入控制台,然后立即写入catch exception not found

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

请注意,日志从上到下读取。因此,不是打印“***”然后抛出异常,而是首先抛出异常并打印“未找到”,然后才打印“***”

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


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

谢谢,我正在修改它,因为我正在解决这个问题。这是一团糟,我知道:-)第一次,我使用@ManagedProperty,我有点困惑…没有任何冒犯的意图,但它显示了。祝您学习和改进代码好运!我们都必须有一天开始;)我觉得这很可怕。会话作用域bean中的静态属性?这不应该在应用程序范围的bean中吗?您了解应用程序/会话/视图/请求范围的生命周期吗?你理解静态的意思吗?我想我理解,但现在我明白了,我不太理解它。如果我必须及时完成我的学士学位工作,而且我是java的处女:)我很想发布一个答案,但我并不完全清楚功能需求是什么。这些设置是用户特定的还是应用程序特定的?
userfound
应该代表什么?是否有人登录?这些信息应该是给谁的?用户本身?还是所有访问webapp的人?那么
PWKITEM
代表什么呢?我已经“解决”了这个问题,你可以从我自己的答案中看到
Userfound
是静态布尔值,它只告诉用户是否找到了用户。这个用户用于ajax调用,如果我将
personId
放入inputtext,ajax调用setter,如果找到用户(bsed on personId),则填充对象PWKITEM的其余属性。这很难为我解释-只有当数据库中存在personId用户时,才能保存工作。我觉得您的应用程序不是线程安全的。即,当多个用户同时使用同一应用程序时,它将失败。我还看到你的另一个问题,你完全误解了会议。这是一个相当严重的问题。我认为最好在将来的问题中发布具体的功能需求,而不是发布一些糟糕的代码,只讲述问题而不是需求。
<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}"/>