2011-06-09 87 views
0

我需要动态设置commandLink的动作。将`action`属性设置为动态评估的字符串

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

您使用的复合材料部件?如果是这样,你可以在你的作品界面中使用标签。 – arg20 2011-06-10 10:25:44

+0

我没有使用JSF 2.0中的复合组件,我从Facelets创建了一个自定义组件。但是如果它能够工作,我可以从JSF 2.0切换到复合组件。你能告诉我一个例子吗?谢谢 – 2011-06-10 10:45:21

回答

-1

所以没有这方面的支持。

0

要么通过周围豆,以及:

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