如何在JSF中调用带有变量参数的方法?
我试过这样的事情:
<h:commandButton value="Send" action="#{myBean.checkPIN(someOtherBean.PIN)}" />
然而,这不起作用。
答案 0 :(得分:4)
是的,如果您使用&gt; EL 2.2 which is part of Servlet 3.0.
请参阅@ BalusC的建议Invoke direct methods or methods with arguments / variables / parameters in EL
答案 1 :(得分:4)
如果您使用的是EL 2.2+,则可能。
如果您使用旧版本的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");
...
}
答案 2 :(得分: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
内,并且您需要一个组件来显示消息。或者您可以更改实现以在控制台中打印消息