Как передать строку действия в составной компонент JSF 2? - PullRequest
11 голосов
/ 17 мая 2010

Я создаю простой составной компонент меню в JSF 2. Однако я не могу передать атрибут String в составной компонент для использования в атрибуте действия . Мой компонент выглядит так:

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

Как получить строку действия в атрибуте действия ?

Ответы [ 2 ]

23 голосов
/ 24 июня 2010

Похоже, это привлекает Horstmanns :-)

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

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>
1 голос
/ 18 мая 2010

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

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

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

<composite:attribute name="action"/>

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

<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...