2012-08-16 44 views
3

我想寫一個或多或少的gemeric組件,其中我交入一個控制器bean,並且組件應該顯示一些CRUD按鈕。我可以在複合組件中的bean上調用方法嗎?

下面的複合物成分:

<composite:interface> 
    <composite:attribute name="controller" /> 
    <composite:attribute name="object" /> 
</composite:interface> 

<composite:implementation> 

    <h:panelGrid columns="3" columnClasses="celltop"> 
    <h:commandButton id="save" value="#{msg.saveButtonLabel}" 
     action="#{cc.attrs.controller.save}" /> 
    <h:commandButton id="delete" value="#{msg.deleteButtonLabel}" 
     action="#{cc.attrs.controller.delete(cc.attrs.object)}" /> 
    <h:commandButton id="cancel" value="#{msg.backButtonLabel}" 
     action="#{cc.attrs.controller.cancel}" immediate="true" /> 
    </h:panelGrid> 

</composite:implementation> 

<viewController:buttons controller="customerController" object="#{customerController.customer}"/> 
@Named 
@ConversationScoped 
public class CustomerController implements Serializable { 

    public String cancel() { 
    customer = null; 
    if (!conversation.isTransient()) { 
     conversation.end(); 
    } 
    return "cancelled"; 
} 

導致以下情況例外,當我點擊取消按鈕:

javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /resources/components/viewController/buttons.xhtml @25,65 action="#{cc.attrs.controller.cancel}": Method not found: customerController.cancel() 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92) 

它是不可能的呼籲給予CC豆方法?

回答

3

是的,你可以。你的錯誤就是,你只傳遞一個普通的String代表託管bean的名稱作爲屬性值

controller="customerController" 

,而你實際上應該已經從EL範圍通過具體的管理bean實例

controller="#{customerController}" 

的異常消息肯定有些誤導,但它基本上只顯示屬性值的Object#toString()。沒有發現如果它是一個具體的管理bean實例,你寧願看到過類似

方法:[email protected]()

或無論是被退回其toString()實施,如果重寫。

+0

eieiei :)再次感謝。 – Joysn 2012-08-16 20:33:49

+0

不客氣。 – BalusC 2012-08-16 20:38:09

相關問題