在用户会话超时后将url参数输入facelets视图

时间:2014-03-05 13:45:05

标签: jsf facelets url-parameters

我正在使用JSF构建CRUD Web应用程序。在用户会话超时后加载页面时遇到问题。那就是我失去了构建视图所需的参数(即使参数在URL中仍然可见,如下所示:'someurl / view.xhtml?pid = 5'。

在.xhtml文件中,参数pid用于在构造视图时从底层数据库加载一些内容。当用户一段时间处于非活动状态时,他们的会话超时,如果他们尝试在浏览器中重新加载页面,他们将被转发到登录页面('someurl / view.xhtml?pid = 5'仍然完好无损)并且成功登录返回到view.xhtml页面,我不想构建视图,好像他们的会话从未超时。

但是这不会发生,因为视图中不再设置'pid'参数。但是由于'pid'参数仍然在url中可见,我觉得我应该能够将它放入视图中并从数据库中加载带有此id的蛋白质。

这些是我尝试过的东西:

    #{protein.setProteinById(param.pid)}

    #{protein.setProteinById(param['pid'])}

    #{protein.setProteinById(request.getParameter('pid'))}

    <c:set value="${request.getParameter('pid')}" var="pid" />
    #{protein.setProteinById(pid)}

这可能吗?怎么样?

1 个答案:

答案 0 :(得分:0)

我不是专家,但你不会在托管bean中设置它吗?

据我所知,有两种方法可以做到这一点。

  1. 在facelet中使用一种方法将视图参数推回到bean中(我有一个因为其他事情而无法工作的场景,因此没有经验)

    What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?

  2. 我有一个prerender方法,它总是在渲染之前调用

  3. <f:metadata>
      <f:event type="preRenderView" listener="#{MyController.prerenderMethod}" />
    </f:metadata>
    

    在方法中,我查看参数:

    public void prerender(ComponentSystemEvent event) {
        value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");
    
    }