gpt4 book ai didi

jsf - session 过期后在@ViewScoped bean 中恢复请求参数

转载 作者:行者123 更新时间:2023-12-01 00:59:54 25 4
gpt4 key购买 nike

我有一个页面,其设置如下,网址如 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>

这一切正常,直到 session 过期。在这一点上,没有任何作用。我无法获取数据,因为我无法再访问 id有问题并调用 DAO获取数据的类没有这个。

通过“ 不再可以访问 id ”我的意思是:

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

返回 null .另外, int id从我的支持 bean(通过 o:viewParam 中的 f:metadata 加载)遭受同样的命运。

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

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

对此,我不知所措。我试过建立自己的 ViewHandler尝试让它简单地重建(模拟刷新)页面,并尝试使用 PrimeFaces ajaxExceptionHandler在其他解决方案中。但是所有这些都会出错并显示出来。我只想访问我的请求参数 my.page.com/table.xhtml ?id=123 从支持 bean 。

任何帮助,将不胜感激。

我正在运行:
  • Tomcat 7
  • 莫哈拉 2.2.6
  • Omnifaces 1.8.1
  • Primefaces 5.0
  • 最佳答案

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

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

    至于保留请求参数,要么在表单中添加一个普通的 HTML 隐藏输入字段:
    <h:form>
    ...
    <input type="hidden" name="id" value="#{dataTable.id}" />
    </h:form>

    或使用 <o:form> includeViewParams="true" , includeRequestParams="true"useRequestURI="true" ,这取决于您是要提交给带有所有 View 参数的 JSF View ID,还是提交给带有整个请求查询字符串的 JSF View ID,或者提交给整个请求 URI(包括查询字符串):
    <o:form includeViewParams="true">
    ...
    </o:form>

    至于在通过 JSF 生命周期的所有阶段之前在回发时重新初始化 bean 的状态,您需要替换 <o:viewParam>通过手动抓取它和 <f:viewAction>来自 @PostConstruct :
    @PostConstruct
    public void initialize() {
    id = Faces.getRequestParameter("id");
    // ...
    }

    关于jsf - session 过期后在@ViewScoped bean 中恢复请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24394142/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com