我需要你的帮助才能将正确的方法传递给按钮actionListner。我在数据表中有一个按钮。按钮代码如下:
<h:commandButton id="submitButton" value="View" actionListener="#{bcd.showDatailDialog}" >
<f:setPropertyActionListener value="#{c}" target="#{bcd.selectedRequest}"/>
</h:commandButton>
根据数据表中显示的#{c.documentType}
的值,它将决定在actionListner中使用哪个方法。
showDatailDialog
方法代码为:
public String showDatailDialog(String sdoc) {
private String methodName;
try {
if (sdoc.equalsIgnoreCase("CE")) {
mthodName="#{bcd.BCESS}";
}
else
{
mthodName="#{bcd.BSSES}";
}
} catch (Exception e) {
System.err.print(e);
e.printStackTrace();
}
return methodName;
}
现在当我点击按钮时,它显示错误:
<ActionListenerImpl> <processAction> javax.el.MethodNotFoundException: //C:/../JDeveloper/../XXX.war/jsf/Search.jsf @91,89 action="#{bcd.showDetailDialog}": Method not found: rfc.Bean3@355f70.showDetailDialog()
答案 0 :(得分:3)
你错误地接近了这个问题。 actionListener
(和action
)属性必须表示方法表达式,而不是值表达式。现在你将它视为返回方法表达式的值表达式。这不会起作用。
让它调用一个真正的方法,然后进一步委托所需的方法。
<h:dataTable ... var="item">
...
<h:commandButton ... action="#{bean.action(item)}" />
public void action(Item item) {
if (item.getType() == Type.FOO) { // It's of course an enum.
oneMethod(item);
} else {
otherMethod(item);
}
}
答案 1 :(得分:0)
showDatailDialog
方法需要一个String
参数,所以只需像这样使用
actionListener="#{bcd.showDatailDialog(c.documentType)}"