会话过期后恢复@ViewScoped bean中的请求参数

2023-12-11

我有一个页面,其设置如下,网址如下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获取数据的类没有这个。

By "不再有权访问id“ 我的意思是 :

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")

returns null。另外,int id来自我的支持 bean(通过o:viewParam in the f:metadata遭受同样的命运。

我知道有一些方法可以捕捉ViewExpiredException,但这不是我想要的。我需要页面使用请求参数简单地重新加载所有值(在本例中id)在用户不知情的情况下。

我(认为我)需要一个@ViewScoped管理bean来控制这个复杂的表和所有参数等。

我对此感到茫然。我尝试过构建自己的ViewHandler尝试让它简单地重建(模仿刷新)页面,并尝试使用PrimeFaces ajaxExceptionHandler除其他解决方案外。但所有这些都会出错并显示出来。我只想访问我的请求参数my.page.com/table.xhtml?id=123来自支持豆。

任何帮助,将不胜感激。

我正在运行:

  • Tomcat 7
  • 莫贾拉2.2.6
  • 全能面孔 1.8.1
  • Primefaces 5.0

至于通过完全重新创建来绕过过期视图,请添加<o:enableRestorableView>到元数据:

<f:metadata>
    ...
    <o:enableRestorableView />
</f:metadata>

至于保留请求参数,either将纯 HTML 隐藏输入字段添加到表单中:

<h:form>
    ...
    <input type="hidden" name="id" value="#{dataTable.id}" />
</h:form>

or use <o:form> with includeViewParams="true",includeRequestParams="true" or useRequestURI="true",具体取决于您是要提交到包含所有视图参数的 JSF 视图 ID,还是提交到包含整个请求查询字符串的 JSF 视图 ID,或者提交到整个请求 URI(包括查询字符串):

<o:form includeViewParams="true">
    ...
</o:form>

至于在回发时重新初始化 bean 的状态,然后再经历 JSF 生命周期的所有阶段,您需要替换<o:viewParam>通过手动抓取它并<f:viewAction> by @PostConstruct:

@PostConstruct
public void initialize() {
    id = Faces.getRequestParameter("id");
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

会话过期后恢复@ViewScoped bean中的请求参数 的相关文章

随机推荐