2013-05-10 45 views
3

如何在JSF中使用變量參數調用方法?具有可變參數的JSF操作方法

我想是這樣的:

<h:commandButton value="Send" action="#{myBean.checkPIN(someOtherBean.PIN)}" /> 

但是,這是行不通的。

+0

您正在使用哪種JSF版本? – 2013-05-10 15:18:38

+0

我使用2.0版本 – 2013-05-10 15:19:35

+0

[JSF 2.0方法調用](http://stackoverflow.com/questions/3284236/jsf-2-0-method-invocation) – BalusC 2013-05-10 16:31:17

回答

3

如果使用EL 2.2+,這是可能的。

如果您正在使用舊版本OT EL,你可以使用做到以下幾點:

<h:commandButton value="Send" action="#{myBean.checkPIN}" /> 
    <f:param name="parameter" value="123" /> 
</h:commandButton> 

在Managed Bean可以檢索它像:

public void checkPIN() { 
    ... 
    Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap(); 
    String param = parameterMap.get("parameter"); 
    ... 
} 
+0

它工作。它的版本肯定有問題。 2.2+更清晰易用。謝謝 – 2013-05-10 15:25:30

+0

@MateuszGaweł看起來像問題出現在您的Web應用程序服務器中。你在使用哪一個? – 2013-05-10 15:43:20

4

是的,它是可能的,如果你使用的是>EL 2.2 which is part of Servlet 3.0.

見@ BalusC的suggetions這裏Invoke direct methods or methods with arguments/variables/parameters in EL

+0

可能的重複你是對的。謝謝 – 2013-05-10 15:25:55

+0

@MateuszGaweł很高興幫助你。標記它作爲答案,如果它有幫助(標記左側)。 – 2013-05-10 15:26:53

0

它的工作與EL 2.2。這可能是您使用的版本,因爲您正在使用JSF 2(即使情況可能不是這樣)。

你可以做一個非常簡單的測試。你可以有一個OtherMB像這樣:

@ManagedBean(name = "otherMB") 
public class OtherMB{ 

    public String getValue(){ 
     return "Other Managed Bean Value"; 
    } 

} 

而像這樣在你的MainMB的方法:

@ManagedBean(name = "mainMB") 
public class MainMB{ 

    public void method(String str){ 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(str)); 
    } 

} 

而在你xhtml,你可以用一個按鈕只需調用該函數:

<h:commandButton action="#{mainMB.method(otherMB.value)}" value="Click Me!" /> 

請記住,h:commandButton需要在h:form之內,並且您需要一個組件nt顯示消息。或者您可以更改實現以在控制檯中打印消息

+0

該功能不是特定於JSF 2.x.它是特定於EL 2.2的。所以使用JSF 2.x並不意味着EL 2.2也被使用。仔細閱讀http://stackoverflow.com/a/3284328/ – BalusC 2013-05-10 16:31:44

+0

的最後一段我知道@BalusC。我仔細閱讀了你的答案(這很順利),這就是爲什麼我在回答中說「可能」和「即使情況可能不是這樣」的原因。 – 2013-05-10 17:17:58

相關問題