2011-05-29 99 views
0

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

我在做什么错了?

+0

我觉得这很可怕。会话scoped bean中的静态属性?这不应该是在应用程序范围的bean?你了解应用程序/会话/查看/请求范围的生命周期吗?你明白'静态'的含义吗? – BalusC 2011-05-30 11:36:05

+0

我以为我会这样做,但现在我明白了,我并没有把它说得很好。如果我必须及时完成我的单身工作,并且我在java中处女,那会发生这种情况:) – gaffcz 2011-05-30 11:42:23

+0

我很想发表一个答案,但是对于功能要求我还不完全清楚。这些设置是用户特定的还是应用程序特定的? 'userfound'应该代表什么?是否有人登录?这是谁的信息?用户本身?或者每个人访问webapp? “PWKITEM”代表什么? – BalusC 2011-05-30 11:45:27

回答

2

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

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

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

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

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

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

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

+0

谢谢,我正在改变它,因为我在解决方案中前进。这是混乱,我知道:-)它第一次,我使用@ManagedProperty,我有点困惑... – gaffcz 2011-05-29 09:53:16

+0

没有意图任何打算,但它表明。学习和改进代码祝你好运!我们都必须开始一天;) – 2011-05-29 09:55:06