Подтвердить что ты не робот

JSF 1.2: ui: включить параметры

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

Благодарим вас за помощь.

4b9b3361

Ответ 1

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

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

а в include:

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

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

Ответ 2

В дополнение к ответу 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]}" />