установить атрибут `action` в динамически вычисляемую строку - PullRequest
0 голосов
/ 09 июня 2011

Мне нужно установить действие для commandLink динамически.

<ice:repeat value="#{mLeft.links}" var="xxx">
    <cvu:leftLink value="#{xxx.value}" action="#{xxx.action}" />
</ice:repeat>

Мой пользовательский тег:

// old
<ui:composition>
    <ice:commandLink immediate="#{immediate}">
        <f:attribute name="action" value="#{action}" />
        <f:attribute name="actionListener" value="#{actionListener}" />
        <f:attribute name="value" value="#{value}" />
    </ice:commandLink>
</ui:composition>

Но, похоже, он не работает.
В прошлом я решал подобную проблему, используя Reflection.Разве нет более простого решения?
Я использую Facelets и JSF 2.0.

РЕДАКТИРОВАТЬ:

ОК.Я изменил компонент пользовательского интерфейса на составной компонент JSF 2.0, но мне все еще не удается заставить его работать.Он работает только в том случае, если я вызываю пользовательский компонент с методом, и он перенаправляется на ссылку в моем пользовательском компоненте.
Я хочу создать список ссылок, каждая из которых вызывает метод, который я даю как Строка !
о <cc:actionSource Я видел, что он используется только для <f:actionListener for="xxx" binding="" />
Пожалуйста, помогите.

// new one
<cc:interface>
    <cc:attribute name="action" required="true" targets="actiune" />
    <cc:attribute name="immediate" required="false" default="false" />
    <cc:attribute name="value" required="true" />
    <cc:actionSource name="ok" targets="actiune" />
</cc:interface>
<cc:implementation>
    <ice:graphicImage value="/images/pucemenu.gif" alt="right"
        style="vertical-align: middle; margin-left: 13px;" />
    <ice:commandLink id="actiune" immediate="#{cc.attrs.immediate}"
        value="#{cc.attrs.value}">
    </ice:commandLink>
</cc:implementation>

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Либо также передайте боб:

<ice:repeat value="#{mLeft.links}" var="xxx">
    <cvu:leftLink bean="#{xxx}" value="value" action="action" />
</ice:repeat>

с

<ui:composition>
    <ice:commandLink value="#{bean[value]}" action="#{bean[action]}" />
        ...
</ui:composition>

Если вы используете свойство с фиксированным значением и имя метода действия, вы можете даже вообще пропустить их и передать один компонент:

<ice:repeat value="#{mLeft.links}" var="xxx">
    <cvu:leftLink bean="#{xxx}" />
</ice:repeat>

с

<ui:composition>
    <ice:commandLink value="#{bean.value}" action="#{bean.action}" />
        ...
</ui:composition>

Или , используйте составной компонент, в котором вы определяете действие как <cc:attribute method-signature>):

<cc:interface>
    <cc:attribute name="action" method-signature="java.lang.String action()" />
    ...
</cc:interface>
<cc:implementation>
    <ice:commandLink value="#{cc.attrs.value}" action="#{cc.attrs.action}" />
    ...
</cc:implementaiion>
0 голосов
/ 17 июля 2011

Так что такая штука еще не поддерживается.

...