【发布时间】:2014-08-15 03:48:52
【问题描述】:
我有一个页面,其设置如下,网址如my.page.com/table.xhtml?id=123:
+----------------------------------------------+
|Meta information |
|----------------------------------------------|
| Search Fields Submit btn |
|----------------------------------------------|
| |
| |
| Big p:dataTable |
| with rowExpansion |
| |
|----------------------------------------------|
| Pager |
+----------------------------------------------+
id=123是控制结果表内容的请求参数。所有操作仅使用AJAX 重新加载数据表。
id 是通过这个加载的:
<f:metadata>
<o:viewParam name="id" value="#{dataTable.id}" />
<f:viewAction action="#{dataTable.initialize}" />
</f:metadata>
这一切都很好,直到会话到期。在这一点上,没有任何效果。我无法获取数据,因为我不再有权访问有问题的 id 并且对获取数据的 DAO 类的调用没有这个。
“无法再访问id”我的意思是:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
返回null。此外,我的 backing bean 中的 int id(通过 f:metadata 中的 o:viewParam 加载)遭受同样的命运。
我知道有一些方法可以捕获ViewExpiredException,但这不是我想要的。我需要页面在用户不知情的情况下使用请求参数(在本例中为 id)简单地重新加载所有值。
我(我想我)需要一个@ViewScoped 管理 bean 来控制这个复杂的表和所有参数等。
我对此感到迷茫。我尝试构建自己的ViewHandler 以尝试让它简单地重建(模拟刷新)页面,并尝试使用PrimeFaces ajaxExceptionHandler 以及其他解决方案。但是所有这些都会出错并显示它。我只想从后台 bean 访问我的请求参数 my.page.com/table.xhtml?id=123。
任何帮助将不胜感激。
我正在运行:
- 雄猫 7
- Mojarra 2.2.6
- Omnifaces 1.8.1
- Primefaces 5.0
【问题讨论】:
-
“不再有权访问相关 id”是什么意思?
-
@EJP 更新了问题,提供了有关您所遇到问题的更多详细信息。
-
发生这种情况是因为 Ajax 调用。会话到期与请求参数无关。使用 c:set 将其存储在视图或 bean 中。
标签: jsf restore view-scope http-request-parameters viewexpiredexception