将`action`属性设置为动态计算的字符串

时间:2011-06-09 19:37:20

标签: jsf attributes components action facelets

我需要动态设置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。

编辑:

确定。我将UI组件更改为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 :(得分:0)

也可以传递bean:

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

如果使用固定值属性和操作方法名称,您甚至可以完全省略它们并单独传递bean:

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

答案 1 :(得分:-1)

所以还没有支持这样的东西。