Как передать строку действия в компонент составного объекта JSF 2?

Я создаю простой компонент составного объекта menuing в JSF 2. Однако я не могу передать Строковый атрибут в составной компонент для использования в атрибуте действия <h:commandLink>. Мой компонент похож:

<composite:interface>
    <composite:attribute name="title" required="true" type="java.lang.String"/>
    <composite:attribute name="view" required="true" />
</composite:interface>

<!--implementation-->
<composite:implementation>
    <li><h:commandLink action="#{cc.attrs.view}" value="#{cc.attrs.title}" /></li>
</composite:implementation>

Как я могу получить Строку действия в атрибут действия <h:commandLink>?

11
задан Jim Tough 31 May 2011 в 18:59
поделиться

2 ответа

Похоже, это привлекает Хорстманнов :-)

Вы должны назвать атрибут «действие» и использовать ретаргетинг. Затем некоторые особые приемы обработки, описанные с исключительной ясностью (не) в

http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/attribute.html

] и документ API ViewDeclarationLanguage.retargetMethodExpressions (не ViewHandler), ссылку на который мне не разрешено вставлять.

Вот как вы это делаете.

<composite:interface>
    <composite:attribute name="title" required="true" type="java.lang.String"/>
    <composite:attribute name="action" targets="view" required="true" />
</composite:interface>

<!--implementation-->
<composite:implementation>
    <li><h:commandLink id="view" value="#{cc.attrs.title}" /></li>
</composite:implementation>
23
ответ дан 3 December 2019 в 04:31
поделиться

Вам необходимо определить тип атрибута как метод например:

<composite:attribute name="view" method-signature="java.lang.String f()"/>

Или, альтернативно, некоторые имена атрибутов обрабатываются в jsf специально. Поэтому, если вы назовете свой атрибут «действие», он также должен работать без сигнатуры метода:

<composite:attribute name="action"/>

Изменить: Я, вероятно, неправильно понял вопрос, если вы хотите создать ссылку на идентификатор представления без вызова действия, вы можете использовать h: ссылка тег вместо h: commandLink :

<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>
1
ответ дан 3 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: