我假设您正在使用JSF 1.x,否则这个问题就没有意义了。在旧版的JSF 1.x中确实不支持
<h:commandButton>
中的
<f:param>
,但自从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时,<h:panelGroup>
也是可能的并且是最佳方案)