我需要动态设置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>
但它似乎不起作用
在过去,我使用反射解决了类似的问题。难道没有更简单的解决方案吗
我使用的是Facelets和JSF 2.0。
编辑:
好的。我将UI组件更改为JSF2.0复合组件,但仍然无法使其正常工作。只有当我用一个方法调用自定义组件,并且它被重新定位到我的自定义组件中的链接时,它才能工作
我想要的是能够生成一个链接列表,每个链接都调用我作为String给出的方法
关于<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>
也可以传递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>
所以目前还不支持这样的东西。