JSF 1.2: ui: включить с параметрами - PullRequest
27 голосов
/ 13 марта 2011

Имеют две страницы JSF 1.2 (one.xhtml и other.xhtml),
, которые включены в текущую страницу по следующему правилу:

...
    <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> 
...

Насколько one.xhtml отличается от other.xhtml только параметрами действия:

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

Можно ли использовать какой-нибудь общий xhtml?
Вместо one.xhtml и other.xhtml, что-то вроде этого:

...
    <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> 
...

спасибо за помощь.

Ответы [ 2 ]

57 голосов
/ 13 марта 2011

Вам необходимо вложить <ui:param> внутрь <ui:include>, чтобы передать параметры во включаемый файл.

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

и в том числе:

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

Обратите внимание, что это поддерживает только строки, а не методы действия. Для последнего вам нужно будет обновить до JSF 2.0 и использовать составные компоненты .

21 голосов
/ 13 марта 2011

В дополнение к ответу BalusC:

Обратите внимание, что это поддерживает только строки, а не методы действия.В последнем случае вам необходимо обновить JSF 2.0 и использовать составные компоненты.

Есть способ сделать это с JSF 1.2, хотя это несколько уродливо:

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

и

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