Jsf 如何使用f:viewParam对GET请求执行操作?
我目前正在尝试将记录的id从一个页面发送到另一个页面 在第1页,我有这样的内容:Jsf 如何使用f:viewParam对GET请求执行操作?,jsf,jsf-2,Jsf,Jsf 2,我目前正在尝试将记录的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.xhtm
<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>
....
。。。。
xmlns:fn=”http://java.sun.com/jsp/jstl/functions">
....
现在,点击链接,转到第2页,第2页由一个视图范围的JSFbean处理。根据我的调试,这是发生的顺序:
(顺便说一句,与文档相反,参数和异常是可选的,至少在我使用过的所有Mojarra 2.x版本中是如此)我使用了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"/>
<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>
...
使用mytemplate.xhtml的mypage.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"/>
<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>
...
...
解决方案在:@BalusC:非常感谢!我今天才知道,我们可以将事件标记放在f:metadata中。因此,基本上,无论我使用GET还是POST,我都可以根据事件类型使用f:metadata中的f:event调用方法,对吗?不客气。是的,这与方法无关。但是,这样一个带有
f:metadata
的页面最好只用于GET请求。@BalusC:Hello!我想知道,如果f:metadata最好只用于GET方法,那么推荐的方法是什么,以便能够使用POST方法在pre-render事件上执行方法?命令链接/按钮操作方法。没有f:metadata
。因此,“通常的方法”:)检查FacesContext#isPostback()
是否返回true,则这是一个(ajax)回发请求。