如何刷新JSF视图(Richfaces)

时间:2011-05-13 16:34:47

标签: jsf

我有两个JSF页面,index.xhtml [index]和main.xhtml [main]。在索引上,我有一个dropDown,当我选择并提交时,应用程序在与支持bean交互后导航到main。

问题是这个(给定一个填充'd1','d2'和'd3'的dropDown):

  • index:选择'd1'
  • main:显示包含d1数据的页面。点击退出。返回索引
  • index:刷新主bean数据项。选择'd2'
  • main:由于支持bean中的错误,显示主页但仍然存在d1数据

当面向导航回到欢迎索引页面时,我尝试了多种方法来抛弃视图的内容,但它在客户端上闲逛。

清除客户端组件树/视图的最有效方法是什么,这样当用户进出主应用程序页面并选择新数据时,旧数据会被删除?

干杯

1 个答案:

答案 0 :(得分:1)

将bean放在请求或视图范围内(因此在会话范围内),以便JSF将在新请求上创建新bean并指示webbrowser不缓存页面以使其赢得不使用缓存中的旧输入值重新显示页面。

更改bean范围是一项微不足道的任务。禁用JSF请求的浏览器缓存可以通过映射到<servlet-name>facesServlet</servlet-name>的过滤器类来完成,并且基本上在doFilter()方法中执行以下操作:

HttpServletResponse hsr = (HttpServletResponse) response;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);