jsf sessionbean对setter和getter有不同的值

时间:2015-01-21 16:23:09

标签: jsf-2

在jsf(Mojarra 2.1)应用程序中,我从下面的sessionbean中调用一个布尔值。 一切正常,直到我使用session.invalidate和新登录进行注销。 在新登录之后,对于getter和setter,detailView的值是不同的。这意味着:

  • 调用setter方法,并将detailView的值设置为 真。
  • 之后,调用getter方法,并在客户端调用 detailView收到值“false”!!

您也可以通过以下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绑定到不同的数据源,但是怎么会这样呢?

感谢任何帮助。提前致谢。

1 个答案:

答案 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标记内