在JSF中使用ui:include方法可以引入一个页面到当前页面中,如果要向被包含的页面中传入参数,可以使用ui:param标签,这个标签类似于f:param,只不过一个用于页面,一个用于实际标签。示例代码如下:
1 <ui:include src="a.xhtml"> 2 <ui:param name="id" value="#{bean.id}" /> 3 </ui:include>
此时可以将一个属性名为id的值传入到a.xhtml中,那么在a.xhtml中,我们可以直接使用#{id}来取得值。不过有时候实际应用中,我们需要在bean中取得这个传递的参数,目前我没有找到一个好的方法,用了一个"障眼法"来达到了这个目的。我的做法是在a.xhtml中使用了一个h:inputHidden标签来存放传递过来的值,然后设置其binding属性,这样就可以在控制层取到控件对象,进而取得它的值。示例代码如下:
1 <h:inputHidden value="#{id}" binding="#{bean.idInput}"/>
在bean中定义一个UIInput类型的变量idInput,并生成set和get方法。该类型的变量有getValue方法,得到一个Object类型的值。这个就是h:inputHidden中的值了。这样就达到了在bean中取得include标签传递到包含页面的参数了。