2011-03-13 19 views
21

Tienes JSF 1.2 (dos páginas one.xhtml y other.xhtml),
que se incluyen a la página actual por la siguiente regla:JSF 1.2: ui: include con los parámetros

... 
    <c:if test="#{flowScope.Bean.param1}"> 
     <ui:include src="one.xhtml"/> 
    </c:if> 

    <c:if test="#{!flowScope.Bean.param1}"> 
     <ui:include src="other.xhtml"/> 
    </c:if> 
... 

En lo que difiere de one.xhtmlother.xhtml solamente por parámetros de acción:

one.xhtml: <h:commandLink action="actionOne">
other.xhtml: <h:commandLink action="actionTwo">

¿es posible utilizar algún general xhtml? En lugar de
one.xhtml y other.xhtml, algo como esto:

... 
    <c:if test="#{flowScope.Bean.param1}"> 
     <ui:include src="general.xhtml" param="actionOne"/> 
    </c:if> 

    <c:if test="#{!flowScope.Bean.param1}"> 
     <ui:include src="general.xhtml" param="actionTwo"/> 
    </c:if> 
... 

gracias por la ayuda.

Respuesta

47

Debe anidar <ui:param> dentro de <ui:include> para pasar los parámetros al archivo incluido.

<ui:include src="general.xhtml"> 
    <ui:param name="action" value="actionOne" /> 
</ui:include> 

y en el se incluyen:

<h:commandButton action="#{action}" /> 

Tenga en cuenta que esto sólo es compatible con cadenas, no los métodos de acción. Para este último necesitaría actualizar a JSF 2.0 y usar composite components.

+0

gracias, i Khow sobre cc, que son grandes, pero en la actual El proyecto jsf 1.2 no puede usarlos. Probaré su solución y escribiré sobre los resultados. – sergionni

+0

Funcionará según la forma en que lo presentó en la pregunta. Pero si estuvieras usando '# {bean.doSomething}' en lugar de 'actionOne', realmente necesitarías obtener componentes compuestos JSF 2.0. – BalusC

+0

extraño, arroja: action = "# {action}": Identity 'action' era nulo y no pudo invocar – sergionni

19

Además de la respuesta de BalusC:

Tenga en cuenta que esto sólo admite cadenas, no métodos de acción. Para este último, usted necesitaría actualizar a JSF 2.0 y para usar componentes compuestos.

Hay una manera de hacer esto con JSF 1.2, aunque es un poco fea:

<ui:include src="general.xhtml"> 
    <ui:param name="actionBean" value="#{myBackingBean}" /> 
    <ui:param name="actionMethod" value="edit" /> 
</ui:include> 

y

<h:commandButton action="#{actionBean[actionMethod]}" /> 
Cuestiones relacionadas