3

如何在 JSF 中调用带有可变参数的方法?

我试过这样的事情:

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

但是,这不起作用。

4

3 回答 3

5

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

如果您使用的是旧版本 ot EL,则可以使用以下操作:

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

在托管 bean 中,您可以像这样检索它:

public void checkPIN() {
   ...
   Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
   String param = parameterMap.get("parameter");
   ...
}
于 2013-05-10T15:22:01.180 回答
4

是的,如果您正在使用 >EL 2.2 which is part of Servlet 3.0.

在此处查看@BalusC 的建议在 EL 中调用直接方法或带有参数/变量/参数的方法

于 2013-05-10T15:19:37.800 回答
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,并且您需要一个组件来显示消息。或者您可以更改实现以在控制台中打印消息

于 2013-05-10T15:29:22.477 回答