2013-02-21 38 views
3

我有一個頁面包括來自動態另一頁的內容(這是由一種方法在bean完成)動態UI包括和的commandButton

firstPage.xhtml

<ui:include src="#{managedBean.pageView}"> 
    <ui:param name="method" value="#{managedBean.someAction}"/> 
</ui:include> 

這重定向到第二頁在<ui:composition>之內,它有commandButton。

secondPage.xhtml

<ui:composition> 
.. 
.. 
<p:commandButton actionListener=#{method} value="Submit"/> 
</ui:composition> 

ManagedBean

public String pageView(){ 
return "secondPage.xhtml"; 
} 

public void someAction(){ 
*someAction* 
} 

命令按鈕在secondPage.xhtml不工作。

任何幫助將不勝感激。

+0

嘗試'actionListener'屬性,而不是'action'。 Action方法需要一個可以轉換爲String的返回值。 – 2013-02-21 12:38:41

+0

是的,我也試過了,它的功效.. – sciFi 2013-02-21 12:50:24

+0

動作方法可以完美地返回'void'。這與'null'返回值相同。 – BalusC 2013-02-21 12:59:02

回答

9

您無法通過<ui:param>傳遞方法表達式。他們被解釋爲價值表達。用括號標記[]如下

<ui:param name="bean" value="#{managedBean}" /> 
<ui:param name="method" value="someAction" /> 

而且他們夫婦在標籤文件:

你基本上已經3個選項:

  1. 拆分bean實例和方法名超過2個參數:

    <p:commandButton action="#{bean[method]}" value="Submit" /> 
    

  2. 創建一個將值表達式轉換爲方法表達式的標記處理程序。 JSF實用程序庫OmniFaces有一個<o:methodParam>這是做到這一點。如在標籤文件如下方式使用它:

    <o:methodParam name="action" value="#{method}" /> 
    <p:commandButton action="#{action}" value="Submit" /> 
    

  3. 使用composite component代替。您可以使用<cc:attribute method-signature>將操作方法​​定義爲屬性。

    <cc:interface> 
        <cc:attribute name="method" method-signature="void method()"/> 
    </cc:interface> 
    <cc:implementation> 
        <p:commandButton action="#{cc.attrs.method}" value="Submit"/> 
    </cc:implementation> 
    

    被用作如下:

    <my:button method="#{managedBean.someAction}" /> 
    
+0

對不起,該方法是actionListener。由於我不得不使用primefaces,所以我沒有使用omnifaces的選擇。請選擇其他選擇或選項嗎? – sciFi 2013-02-21 12:54:25

+3

只需更改'actionListener'中的'action'就可以了嗎?你爲什麼認爲PrimeFaces和OmniFaces不能一起使用? OmniFaces是一個實用程序庫,而不是像PrimeFaces/RichFaces這樣的組件庫。更多的是,OmniFaces展示應用程序使用PrimeFaces的UI。請注意,我提到了3個選項,其中2個不使用OmniFaces。另請注意,OmniFaces是Apache許可證下的開源代碼。 – BalusC 2013-02-21 12:55:10

+0

'@ balus'是不是,當在''的src裏面提到一個bean的方法時,那麼這個方法總是在其他方法之前被調用(當渲染頁面時)? – sciFi 2013-02-22 05:57:05