如何将方法名称传递给actionListner

时间:2015-05-06 14:04:32

标签: jsf jsf-2

我需要你的帮助才能将正确的方法传递给按钮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() 

2 个答案:

答案 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)}"