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;
}
如果你在 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}
请注意 EL 中括号的无意义和谓词get
不合理。 #{bean.doMyMethod}
将调用bean.getDoMyMethod()
并返回关联的字符串。
在您的情况下,您需要访问该方法:#{searchAction.getSearchMasterId()}
.
最后,值得注意的是,在某些情况下(操作方法、操作侦听器方法、AJAX 行为方法等(,没有必要同时包含括号和方法参数,因为 JSF 需要一个具有适当参数的方法,并且它会自行设置它。
使用它,它会在不使用括号的情况下产生相同的结果:#{searchAction.getSearchMasterId}
。
还值得注意的是,您可能会将执行业务逻辑或预设某些值的操作方法与获取要在 JSF 组件中显示的值的方法混淆。