@ManagedProperty - 设置getter和setter

据this article,我实现了@ManagedProperty(value="#{settings}")到我的支持bean:@ManagedProperty - 设置getter和setter

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,它会被捕获(“未找到”)。

我在做什么错了?

回答:

你的问题看起来非常混乱。你首先展示一些bean代码,然后在甚至提到任何问题之前立即说出“我认为这是一个Ajax问题”。问题的其余部分没有多大区别。

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

Ican't理解,为什么它找到项目写入正确的名称来安慰,之后immediatelly的是,它写入找不到捕获异常???? ....

您正在访问静态的Settings。你在课堂上宣布的实例似乎没用。如果Tools.find引发异常并因此没有分配新值,则完全可能在静态Settings.PWKITEM字段中仍存在旧值。这并不奇怪。

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

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

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

以上是 @ManagedProperty - 设置getter和setter 的全部内容, 来源链接: utcz.com/qa/263602.html

回到顶部