1
javax.faces.FacesException: #{searchAction.searchMasterId}: javax.el.MethodNotFoundException: /files/search.xhtml @186,176 action="#{searchAction.searchMasterId}": Method not found: com.action.SearchAction@1130c0a.searchMasterId()
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:85)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:334)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)

我收到上述错误,即使我明确提到了我添加的方法<p:remoteCommand name="getMasterDetails" action="#{searchAction.searchMasterId}" />

我有控制器方法

public String getSearchMasterId() {
            //some code
    return SUCCESS;
}
4

1 回答 1

2

如果您在 EL 2.2 上运行,则有机会在代码中使用任意参数调用任意方法,例如:

public void doMyMethod() { ... };
public void doMyMethodWithParameters(String p1, int p2) { ... };

与 JSF

#{bean.doMyMethod()}
#{bean.doMyMethodWithParameters(p1, p2)}

注意最后的括号:(). 如果您不编写它们,JSF 将尝试访问所提供名称的属性,而不管它是否存在:

//note that 'private String doMyMethod' property is unnecessary
public String getDoMyMethod() { return ...; }

与 JSF

#{bean.doMyMethod}

请注意末尾没有括号,并且getEL 中没有谓词。#{bean.doMyMethod}将调用bean.getDoMyMethod()并返回相关的字符串。

在您的情况下,您需要以以下方式访问该方法:#{searchAction.getSearchMasterId()}.

最后,值得注意的是,在某些情况下(动作方法、动作侦听器方法、AJAX 行为方法等),不必同时包含括号和方法参数,因为 JSF 需要一个具有适当参数的方法,它会自行设置。

使用它,它会产生相同的结果而不使用括号:#{searchAction.getSearchMasterId}.

还值得注意的是,您可能会将执行业务逻辑或预设某些值的操作方法与获取要在 JSF 组件中显示的值的方法混淆。

于 2013-05-23T12:27:25.723 回答