Как передать строку действия в составной компонент JSF 2?
Я создаю простой составной составной компонент в JSF 2. Однако я не могу передать атрибут String в составной компонент для использования в атрибуте action < 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>
Как я могу получить действие String в атрибуте action < h: commandLink > ?
Ответы
Ответ 1
Похоже, это привлекает 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>
Ответ 2
Вам нужно определить тип атрибута как метод:
<composite:attribute name="view" method-signature="java.lang.String f()"/>
Или, альтернативно, некоторые имена атрибутов обрабатываются специально в jsf. Поэтому, если вы назовете свой атрибут "действие", он также должен работать без подписи метода:
<composite:attribute name="action"/>
Изменить: Я, вероятно, неправильно понял вопрос, если вы хотите ссылаться на идентификатор вида без вызова действия, вы можете использовать тег h:link
вместо h:commandLink
:
<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>