我正在使用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)}
这可能吗?怎么样?
答案 0 :(得分:0)
我不是专家,但你不会在托管bean中设置它吗?
据我所知,有两种方法可以做到这一点。
在facelet中使用一种方法将视图参数推回到bean中(我有一个因为其他事情而无法工作的场景,因此没有经验)
What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
我有一个prerender方法,它总是在渲染之前调用
<f:metadata> <f:event type="preRenderView" listener="#{MyController.prerenderMethod}" /> </f:metadata>
在方法中,我查看参数:
public void prerender(ComponentSystemEvent event) {
value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");
}