我在generalPage.xhtml中有下面的命令按钮,它有GeneralPageMB支持bean。
<p:commandButton value="#{facility.facilityName}" ajax="false"
action="facilityHome.xhtml?faces-redirect=true&includeViewParams=true">
<f:param name="fid" value="#{facility.id}" />
</p:commandButton>
我有第二页facilityHome.xhtml,其中包含以下代码:
<div style="width: 400px; height: 250px;" class="loginContainerBg">
<h:form id="f" prependId="false">
<f:metadata>
<f:viewParam name="fid" value="#{facilityHomeMB.facilityId}"
converter="com.ot.common.utility.FacilityIdConverter" />
</f:metadata>
</div>
facilityHome.xhtml将支持bean作为FacilityHomeMB。所以我试图获取View参数并在FacilityHomeMB bean中设置为facilityId属性。我的问题是facilityId没有设置。代码有什么问题?任何帮助将不胜感激。
我正在使用tomcat 7,Primefaces 4.0,Mojarra 2.1。
答案 0 :(得分:1)
<p:commandButton>
是错误的工具。它的目的是执行POST请求,从而提交封闭表单的数据。它不是用于页面到页面的导航。您的具体问题是由于您之后显式发送重定向导致的,导致带参数的初始请求丢失。
最好只使用<p:button>
。这样你也不再需要整个<h:form>
而且你也不需要混淆faces-redirect
等。
<p:button value="#{facility.facilityName}" outcome="facilityHome">
<f:param name="fid" value="#{facility.id}" />
</p:button>
就是这样。
在目标页面中,只需保留<f:metadata>
,但不应将其嵌套在表单中。另请参阅When using <ui:composition> templating, where should I declare the <f:metadata>?此外,您绝对不应使用prependId="false"
。这与当前的问题无关,但它会使JSF ajax完全混乱(无法找到要渲染的组件等)。