我想根据点击的按钮添加特定页面。
到目前为止h:commandButton
,我无法使用f:param
,因此看起来我应该使用f:attribute
代码。
如果是f:param
,我会像这样编码:
<h:commandLink action="connectedFilein">
<f:param name="fileId" value="#{fileRecord.fileId}"/>
<h:commandLink>
<c:if test="#{requestParameters.fileId!=null}">
<ui:include src="fileOut.xhtml" id="searchOutResults"/>
</c:if>
f:attribuite
案例是什么?
感谢
答案 0 :(得分:15)
我假设您使用的是JSF 1.x,否则这个问题没有意义。遗留JSF 1.x中确实不支持<f:param>
中的<h:commandButton>
,但自JSF 2.0起支持它。
<f:attribute>
可与actionListener
结合使用。
<h:commandButton action="connectedFilein" actionListener="#{bean.listener}">
<f:attribute name="fileId" value="#{fileRecord.fileId}" />
</h:commandButton>
与
public void listener(ActionEvent event) {
this.fileId = (Long) event.getComponent().getAttributes().get("fileId");
}
(假设它是Long
类型,这是ID的经典之作)
然而,最好使用JSF 1.2引入<f:setPropertyActionListener>
。
<h:commandButton action="connectedFilein">
<f:setPropertyActionListener target="#{bean.fileId}" value="#{fileRecord.fileId}" />
</h:commandButton>
或者,当您已经运行支持Servlet 3.0 / EL 2.2的容器(Tomcat 7,Glassfish 3等)并且您的web.xml
被声明为符合Servlet 3.0时,您可以将其作为方法参数传递。
<h:commandButton action="#{bean.show(fileRecord.fileId)}" />
与
public String show(Long fileId) {
this.fileId = fileId;
return "connectedFilein";
}
与具体问题无关,我强烈建议尽可能使用JSF / Facelets标签而不是JSTL 。
<ui:fragment rendered="#{bean.fileId != null}">
<ui:include src="fileOut.xhtml" id="searchOutResults"/>
</ui:fragment>
(使用JSP代替Facelets时,A <h:panelGroup>
也是可行的,也是最好的方法)