据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,它会被捕获(“未找到”)。
我在做什么错了?
我觉得这很可怕。会话scoped bean中的静态属性?这不应该是在应用程序范围的bean?你了解应用程序/会话/查看/请求范围的生命周期吗?你明白'静态'的含义吗? – BalusC 2011-05-30 11:36:05
我以为我会这样做,但现在我明白了,我并没有把它说得很好。如果我必须及时完成我的单身工作,并且我在java中处女,那会发生这种情况:) – gaffcz 2011-05-30 11:42:23
我很想发表一个答案,但是对于功能要求我还不完全清楚。这些设置是用户特定的还是应用程序特定的? 'userfound'应该代表什么?是否有人登录?这是谁的信息?用户本身?或者每个人访问webapp? “PWKITEM”代表什么? – BalusC 2011-05-30 11:45:27