2011-06-09 65 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>