【问题标题】:How to reinit some values in session bean on page load?如何在页面加载时重新初始化会话 bean 中的某些值?
【发布时间】:2013-06-15 10:57:55
【问题描述】:

我想用会话范围制作类似于视图范围的东西。 我有一个会话 bean,在我的页面中我有一些搜索结果表,我想清除它们并在页面加载时清除输入文本,我无法从会话 bean 更改为请求 bean,我现在唯一的想法是在页面上添加一个清除按钮,它的操作方法将重置表格和输入文本。

我正在使用 jsf 1.1,请告知最佳方法。

【问题讨论】:

  • 你根本做不到。您必须在请求范围内设置托管 bean 并将所有初始化数据保存在会话中并在托管 bean 构造函数中重新加载它并使用某种标志让您的托管 bean 知道它是应该从会话中提取数据还是只是重新加载它..

标签: jsf


【解决方案1】:

检查请求是否是 GET 请求(或者,至少不是 POST 请求)。

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

if ("GET".equals(request.getMethod())) {
    // ...
}

在 JSF 1.2 上,您应该为此使用 ResponseStatemanager#isPostback()
在 JSF 2.x 上,您会为此使用 FacesContext#isPostback()

您可以在(隐藏的)输出组件的 getter 中执行此操作。


一种完全不同的替代方法是安装Tomahawk 并使用<t:saveState> 在请求范围的bean 上模拟JSF 2.x 视图范围。

【讨论】:

  • 在我的托管 bean 中将上面的代码放在哪里?因为 init 方法和构造函数将在第一次创建会话时被调用。
  • 已经回答了。 “您可以在(隐藏的)输出组件的 getter 中执行此操作。”
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
相关资源
最近更新 更多