NCi*_*ter 1 facelets myfaces jsf-2.2
我正在尝试将简单的 JSF2.2 原型从Mojarra 2.2.5(...工作正常...)迁移到MyFaces 2.2.3,但出现NullPointerException。我通常使用 Mojarra 做的是以编程方式
在容器中
包含(注入)JSF 页面。
示例包含页面(inclusion.xhtml)是:
<h:panelGroup id="container">
</h:panelGroup>
<h:form>
<h:commandButton value="Include page" action="#{inclusion.include('included.xhtml')}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
包含的页面(included.xhtml)包含类似以下内容:
<h:outputText value="INCLUDED TEXT ..." />
Run Code Online (Sandbox Code Playgroud)
这是托管 bean:
@ManagedBean(name="inclusion")
@RequestScoped
public final class Inclusion {
public void include(String contentUrl) throws IOException{
FacesContext fc = FacesContext.getCurrentInstance();
FaceletContext f2ctx = (FaceletContext) fc.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
UIComponent uic = fc.getViewRoot().findComponent("container");
if (uic != null && f2ctx != null) {
f2ctx.includeFacelet(uic, contentUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
这是例外:
javax.el.ELException:java.lang.NullPointerException
viewId=/inclusion.xhtml 位置=/opt/jbdevstudio7/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/jsf2test/inclusion.xhtml PhaseId=INVOKE_APPLICATION(5)
引起:java.lang.NullPointerException - org.apache.myfaces.view.facelets.impl.FaceletCompositionContextImpl.generateUniqueId(FaceletCompositionContextImpl.java:1045) 处的 java.lang.NullPointerException
/inclusion.xhtml 第 15 行第 91 列 action="#{inclusion.include('included.xhtml')}" - 状态大小:0 字节
这是堆栈跟踪:
org.apache.myfaces.view.facelets.el.ContextAwareELException:javax.el.ELException:java.lang.NullPointerException在org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:108)在组织.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74) 在 org.primefaces.application.DialogActionListener.processAction(DialogActionListener.java:45) 在 javax.faces.component.UICommand.broadcast(UICommand.java:120) )在 javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1172) 在 javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:365) 在 javax.faces.component.UIViewRoot._process(UIViewRoot.java:第 1656 章(LifecycleImpl.java:196) 在 org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) 在 org.apache.catalina。 core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) 在 org .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 jplus.web.filters.FlowFilter.doFilter(FlowFilter.java :215)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.apache.catalina.core。 StandardWrapperValve.invoke(StandardWrapperValve.java:222) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve) .java:953) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在 org.apache.coyote。 http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint. java:312) 在 java.util.concurrent.ThreadPoolExecutor$Worker 处。runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:662) 引起:javax.el.ELException :java.lang.NullPointerException在org.apache.el.parser.AstValue.invoke(AstValue.java:291)在org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)在org.apache.myfaces.view .facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96) ... 33 更多 造成者:java.lang.NullPointerException at org.apache.myfaces.view.facelets.impl.FaceletCompositionContextImpl.generateUniqueId(FaceletCompositionContextImpl.java:1045 )在org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.generateUniqueId(DefaultFaceletContext.java:322)在org.apache.myfaces.view.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:87)在javax。 faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 在 org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59) 在 org.apache.myfaces.view.facelets。 compiler.EncodingHandler.apply(EncodingHandler.java:48) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:514) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet。包括(DefaultFacelet.java:568)在org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:546)在org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext。 java:240)在Inclusion.include(Inclusion.java:27)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.el.parser.AstValue.invoke(AstValue.java:278) ... 35 更多CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 在 org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59) 在 org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply( EncodingHandler.java:48) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:514) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:第568章.include(Inclusion.java:27) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25 )在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.el.parser.AstValue.invoke(AstValue.java:278) ... 35 更多CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 在 org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59) 在 org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply( EncodingHandler.java:48) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:514) 在 org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:第568章.include(Inclusion.java:27) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25 )在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.el.parser.AstValue.invoke(AstValue.java:278) ... 35 更多
你有什么想法 ?
有错误吗?
谢谢。
这不是一个错误。使用 FaceletContext 是错误的方法,因为后来它会导致重复的 id 和状态管理问题,但没有解决方案,因为从一开始代码就是错误的。相反,尝试使用这种方式:
ViewDeclarationLanguage vdl = facesContext.getApplication().
getViewHandler().getViewDeclarationLanguage(
facesContext, facesContext.getViewRoot().getViewId());
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("src", "/addSimpleIncludeVDL_1_1.xhtml");
UIComponent component = vdl.createComponent(facesContext,
"http://java.sun.com/jsf/facelets",
"include", attributes);
getChildren().add(component);
Run Code Online (Sandbox Code Playgroud)
vdl.createComponent(...) 是在 JSF 2.2 中添加的,并且在 MyFaces 中它经过改进以允许这种用法。您甚至可以通过这种方式以编程方式添加复合组件。在 MyFaces 用户列表中,据报道这种方式效果非常好。
| 归档时间: |
|
| 查看次数: |
4823 次 |
| 最近记录: |