2017-04-06 78 views
0

我有3個文件:通方法:包括定製組件

main.xhtml

<ui:include src="included.xhtml"> 
    <ui:param name="bean" value="#{invoices}" /> 
    <ui:param name="method" value="initExchange" /> 
</ui:include> 

included.xhtml

<s:compositeComponent bean="#{bean}" beanMethod="#{method}" 
        buttonActionListener="#{bean[method]()}" /> 

compositeComponent.xhtml

<cc:interface> 
    <cc:attribute name="bean" /> 
    <cc:attribute name="beanMethod" /> 
    <cc:attribute name="buttonActionListener" method-signature="void f()" /> 
</cc:interface> 
<cc:implementation> 
    <h:outputText value="#{cc.attrs.bean}" /> 
    <h:outputText value="#{cc.attrs.beanMethod}" /> 
    <p:commandButton actionListener="#{cc.attrs.buttonActionListener}" /> 

h:outputTexts正常。但點擊按鈕給人例外:

目標不可達,標識「豆」解析爲空

怎樣的方法傳遞給按鈕的ActionListener的?

回答

0

時的ActionListener在複合部件中included.xhtml被寫爲豆[方法]像它的工作原理:

<p:commandButton actionListener="#{cc.attrs.bean[cc.attrs.beanMethod]}" /> 

所以一般傳遞方法通過多級的屬性應該總是由單獨的豆和方法來完成而不是一個屬性與'方法簽名'。