JSF ManagedBean 初始化失败
JSF ManagedBean initialisation fails
我是 JSF 的新手,从昨天开始我就遇到了一个严重的问题。下面的方法'initialiseLists'是通过
调用的
<f:event listener="#{Bean.initialiseLists}" type="postAddToView" />
在我看来
public void initialiseLists() {
this.setAuthorisationsToDelete(new ArrayList<>());
this.setRoles(new RoleManager().readAll());
this.setReportIntervals(new ReportIntervalManager().readAll());
AddUserCustomerBundle bundle = new AddUserCustomerBundle(new CustomerManager().readActive());
System.out.println("");
this.setAddKundeAuth(bundle);
}
如果我在 Eclipse 中的 Tomcat7 上使用此代码部署 Bean,一切正常。但是你可能会问'Why did he put the System.out.println("") there?'。
真正奇怪的是,如果我评论系统输出,我会收到一条错误消息。
/WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
取消注释系统输出并重新启动 tomcat 后,它再次正常工作。谁能告诉我,在哪里可以获得有关错误原因的更多信息?在我看来,我的 Bean 无法初始化。 Java Stacktrace 没有产生任何有趣的东西...
Feb 27, 2015 10:05:11 AM com.sun.faces.context.ExceptionHandlerImpl log
1100: JSF1073: javax.el.PropertyNotFoundException erfasst während Verarbeitung von RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=/WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
Feb 27, 2015 10:05:11 AM com.sun.faces.context.ExceptionHandlerImpl log
1100: /WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
javax.el.PropertyNotFoundException: /WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
at com.sun.faces.facelets.el.TagMethodExpression.invoke(Unknown Source)
at com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(Unknown Source)
at javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(Unknown Source)
at javax.faces.event.SystemEvent.processListener(Unknown Source)
at javax.faces.event.ComponentSystemEvent.processListener(Unknown Source)
at com.sun.faces.application.ApplicationImpl.processListeners(Unknown Source)
at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(Unknown Source)
at com.sun.faces.application.ApplicationImpl.publishEvent(Unknown Source)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(Unknown Source)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(Unknown Source)
at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
at com.sun.faces.lifecycle.LifecycleImpl.render(Unknown Source)
at javax.faces.webapp.FacesServlet.service(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at de.frupek.fluidman.web.filters.LoginFilter.doFilter(LoginFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Edit1:如果我向我的 bean 添加另一个 属性,我现在会收到错误消息,例如
private int test;
会不会是环境问题(tomcat7、eclipse、ubuntu等...)?
Edit2:在我的Bean中使用java.util.function.Function似乎是个问题。如果我评论所有事件,一切正常,如果我添加类似
Function<User, List<Customer>> f = User::getCustomers;
抛出上述异常。 JSF 的使用是否有任何 Java8 限制?
我假设你的 class 叫做 Bean
并且你没有为它提供别名,这将强制 JSF 用别名注册它 bean
.
在 <f:event>
中,将 Bean
更改为 bean
:
<f:event listener="#{bean.initialiseLists}" type="postAddToView" />
或者,您可以这样命名您的 bean Bean
:
@ManagedBean(name = "Bean")
public class Bean { ... }
并在 <f:event>
的侦听器属性中保留当前表达式。
几小时后我能够 "solve" 我的问题,"solution" 有效但不是很令人满意:我不得不复制引用的方法 initialiseLists 和另一个使用 class-member bundle 到我的源文件的末尾。我的 bean 现在已正确初始化(包含我所有的 t:param 内容)并且运行良好。
我不知道是哪个组件导致了这种特殊行为,我希望我不会再面对它了。我的猜测是,任何 JSF class 在 "scanning" 我的 bean 时失败,但它可能是完全错误的...
我是 JSF 的新手,从昨天开始我就遇到了一个严重的问题。下面的方法'initialiseLists'是通过
调用的<f:event listener="#{Bean.initialiseLists}" type="postAddToView" />
在我看来
public void initialiseLists() {
this.setAuthorisationsToDelete(new ArrayList<>());
this.setRoles(new RoleManager().readAll());
this.setReportIntervals(new ReportIntervalManager().readAll());
AddUserCustomerBundle bundle = new AddUserCustomerBundle(new CustomerManager().readActive());
System.out.println("");
this.setAddKundeAuth(bundle);
}
如果我在 Eclipse 中的 Tomcat7 上使用此代码部署 Bean,一切正常。但是你可能会问'Why did he put the System.out.println("") there?'。
真正奇怪的是,如果我评论系统输出,我会收到一条错误消息。
/WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
取消注释系统输出并重新启动 tomcat 后,它再次正常工作。谁能告诉我,在哪里可以获得有关错误原因的更多信息?在我看来,我的 Bean 无法初始化。 Java Stacktrace 没有产生任何有趣的东西...
Feb 27, 2015 10:05:11 AM com.sun.faces.context.ExceptionHandlerImpl log
1100: JSF1073: javax.el.PropertyNotFoundException erfasst während Verarbeitung von RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=/WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
Feb 27, 2015 10:05:11 AM com.sun.faces.context.ExceptionHandlerImpl log
1100: /WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
javax.el.PropertyNotFoundException: /WEB-INF/common/createOrEdit.xhtml @14,72 listener="#{Bean.initialiseLists}": Target Unreachable, identifier 'Bean' resolved to null
at com.sun.faces.facelets.el.TagMethodExpression.invoke(Unknown Source)
at com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(Unknown Source)
at javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(Unknown Source)
at javax.faces.event.SystemEvent.processListener(Unknown Source)
at javax.faces.event.ComponentSystemEvent.processListener(Unknown Source)
at com.sun.faces.application.ApplicationImpl.processListeners(Unknown Source)
at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(Unknown Source)
at com.sun.faces.application.ApplicationImpl.publishEvent(Unknown Source)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(Unknown Source)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(Unknown Source)
at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
at com.sun.faces.lifecycle.LifecycleImpl.render(Unknown Source)
at javax.faces.webapp.FacesServlet.service(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at de.frupek.fluidman.web.filters.LoginFilter.doFilter(LoginFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Edit1:如果我向我的 bean 添加另一个 属性,我现在会收到错误消息,例如
private int test;
会不会是环境问题(tomcat7、eclipse、ubuntu等...)?
Edit2:在我的Bean中使用java.util.function.Function似乎是个问题。如果我评论所有事件,一切正常,如果我添加类似
Function<User, List<Customer>> f = User::getCustomers;
抛出上述异常。 JSF 的使用是否有任何 Java8 限制?
我假设你的 class 叫做 Bean
并且你没有为它提供别名,这将强制 JSF 用别名注册它 bean
.
在 <f:event>
中,将 Bean
更改为 bean
:
<f:event listener="#{bean.initialiseLists}" type="postAddToView" />
或者,您可以这样命名您的 bean Bean
:
@ManagedBean(name = "Bean")
public class Bean { ... }
并在 <f:event>
的侦听器属性中保留当前表达式。
几小时后我能够 "solve" 我的问题,"solution" 有效但不是很令人满意:我不得不复制引用的方法 initialiseLists 和另一个使用 class-member bundle 到我的源文件的末尾。我的 bean 现在已正确初始化(包含我所有的 t:param 内容)并且运行良好。
我不知道是哪个组件导致了这种特殊行为,我希望我不会再面对它了。我的猜测是,任何 JSF class 在 "scanning" 我的 bean 时失败,但它可能是完全错误的...