在jsf(Mojarra 2.1)应用程序中,我从下面的sessionbean中调用一个布尔值。 一切正常,直到我使用session.invalidate和新登录进行注销。 在新登录之后,对于getter和setter,detailView的值是不同的。这意味着:
您也可以通过以下ouputlines看到这一点:
System.out.println("getdetailView:" + detailView + ": " + sessionId )
和
System.out.println("setdetailView:" + detailView + ": " + sessionId );
当我比较两个方法调用的sessionIds时,我们可以看到两个方法都具有相同的sessionId。
@ManagedBean(name = "sessionBean")
@SessionScoped
public class SessionBean implements Serializable {
…
private boolean detailView = false;
public boolean isDetailView() {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
String sessionId = session.getId();
System.out.println("getdetailView:" + detailView + ": " + sessionId );
Return detailView;
}
public void setDetailView(final boolean detailView) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
String sessionId = session.getId();
System.out.println("setdetailView:" + detailView + ": " + sessionId );
this.detailView = detailView;
}
在jsf中,值的调用方式如下:
<p:inputText rendered="#{sessionBean.detailView} value="bla"/>
看来,getter和setter绑定到不同的数据源,但是怎么会这样呢?
感谢任何帮助。提前致谢。
答案 0 :(得分:0)
我不会在支持bean中看到detailView
的任何吸气剂,你必须得到它的吸气剂:
public boolean getDetailView() {
//any required code.
Return detailView;
}
注意您的支持bean由@SessionScoped
注释,所以如果在会话结束后无法访问这些字段,如果您希望它在应用程序注释期间保持活动状态,那么它的逻辑是正确的与@ApplicationScoped
。
我在jst
代码中发现错误,请更正:<p:inputText rendered="#{sessionBean.detailView}" value="bla"/>
但是我不确定是否可以使用{ {1}} inputText的EL
属性的表达式,其他的方法是将代码置于render
标记内