将backing bean作为parameter passing给Facelet

我有一个可以在不同的应用程序中使用的Facelet。 我不想复制它,但重复使用它。 我需要传递将作为参数pipe理视图的后台bean,因为某些逻辑可能会根据所在的应用程序而有所不同。

我不想使用复合组件,只是包含Facelet并指定哪个bean将pipe理视图。 我怎样才能做到这一点?

让我举个例子:

<ui:composition template="/resources/common/templates/template.xhtml" 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" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:fn="http://java.sun.com/jsp/jstl/functions"> <ui:define name="content"> <!-- somehow establish the backing bean that will manage formView.xhtml --> <!-- f:set assign="ParameterBean" value="#{Bean}" / --> <ui:include src="formView.xhtml" /> </ui:define> </ui:composition> 

formView.xhtml:

 <ui:composition template="/resources/common/templates/template.xhtml" 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" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:fn="http://java.sun.com/jsp/jstl/functions"> <ui:define name="content"> <h:outputText value="#{ParameterBean.texto}" /> </ui:define> </ui:composition> 

你可以使用<ui:param> 。 它需要嵌套在<ui:include>

 <ui:include src="formView.xhtml"> <ui:param name="ParameterBean" value="#{Bean}" /> </ui:include> 

标准Java命名约定与具体问题无关 ,表明实例variables名称必须以小写字母开头。 您应该以分别使用parameterBean#{bean}方式更改您的代码。

因为我昨天发现它有帮助,所以当我在寻找这个时,这里是一个简单的如何做到这一点,没有多余的模板,定义和命名空间:

File1.xhtml(根标签并不重要)

 <ui:include src="File2.xhtml"> <ui:param name="person" value="#{whatever_value_you_want_to_pass}" /> </ui:include> 

File2.xhtml

 <ui:composition ... xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" ... > <h:outputLabel value="#{person.name}" /> </ui:composition> 

你也可以用相同的方式进一步嵌套。

File1.xhtml

 <ui:include src="File2.xhtml"> <ui:param name="person" value="#{whatever_value_you_want_to_pass}" /> </ui:include> 

File2.xhtml

 <ui:composition ... xmlns:ui="http://java.sun.com/jsf/facelets" ... > <ui:include src="File3.xhtml"> <ui:param name="name" value="#{person.name}" /> </ui:include> </ui:composition> 

File3.xhtml

 <ui:composition ... xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" ... > <h:outputLabel value="#{name.length}" /> </ui:composition>