我正在尝试将记录的ID从一个页面发送到另一个页面。
所以在第1页中,我有类似的东西:
<p:column>
<h:link value="#{rpb.map['transNum']}" outcome="TInput.xhtml">
<f:param name="id" value="#{rpb.map['id']}" />
</h:link>
</p:column>
并且在目标页面(TInput.xhtml)中,我有类似的东西来捕获id:
....
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<f:metadata>
<f:viewParam name="id" value="#{tInputBean.id}"></f:viewParam>
</f:metadata>
<h:head>
....
现在,单击链接,转到第2页,第2页由一个视图范围的jsf bean处理。从我的调试来看,这是发生的顺序:
我想要达到的目标是: 模型更新后,我想执行该记录ID的查询,获取它的bean以及它的业务服务详细信息列表。
我想知道我应该在哪里放置查询代码:
请赐教:)
答案 0 :(得分:8)
向<f:event type="preRenderView">
添加<f:metadata>
。
<f:metadata>
<f:viewParam name="id" value="#{tInputBean.id}" />
<f:event type="preRenderView" listener="#{tInputBean.init}" />
</f:metadata>
带
public void init(ComponentSystemEvent event) throws AbortProcessingException {
// ...
}
(顺便说一下,与文档相反,参数和异常是可选的,至少在我使用的所有Mojarra 2.x版本中都是如此)
答案 1 :(得分:4)
我使用了BalusC解决方案。感谢;)
我只想添加如果你使用facelet,你需要把:
<f:metadata>
使用模板在每个页面中:
mytemplate.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:insert name="meta"/>
mypage.xhtml使用mytemplate.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="mytemplate">
<ui:define name="meta">
<f:metadata>
<f:viewParam name="id" value="#{tInputBean.id}" />
<f:event type="preRenderView" listener="#{tInputBean.init}" />
</f:metadata>
</ui:define>
...
在https://forums.oracle.com/forums/thread.jspa?threadID=2145709
找到解决方案