NPE-Argument-Fehler: Parameter Wert null ist (JSF) nur, wenn <h:head> ist in Seite
Ich habe eine jsf Seite, main.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<ui:composition template="WEB-INF/templates/layout.xhtml">
<ui:define name="title">Page Title</ui:define>
...
Layout.xml ist wie folgt:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:head>
<title><ui:insert name="title">Default Title</ui:insert></title>
<h:outputStylesheet library="theme" name="main.css" />
</h:head>
<h:body>
<div id="header">
<ui:insert name="header">
<ui:include src="header.xhtml"/>
</ui:insert>
<ui:insert name="toolbar">
<ui:include src="toolbar.xhtml" />
</ui:insert>
</div>
<div id="content">
<br/>
<ui:insert name="content">
TBD
</ui:insert>
</div>
<div id="footer">
<ui:insert name="footer">
<ui:include src="footer.xhtml"/>
</ui:insert>
</div>
</h:body>
</html>
Wenn ich versuche die Seite zu laden, bekomme ich die folgende stack-trace:
Dec 8, 2011 8:58:50 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/main.xhtml]
java.lang.NullPointerException: Argument Error: Parameter value is null
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.writeURIAttribute(HtmlResponseWriter.java:985)
at com.sun.faces.renderkit.html_basic.StylesheetRenderer.encodeEnd(StylesheetRenderer.java:108)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at com.sun.faces.renderkit.html_basic.HeadRenderer.encodeHeadResources(HeadRenderer.java:105)
at com.sun.faces.renderkit.html_basic.HeadRenderer.encodeEnd(HeadRenderer.java:92)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.lmig.cm.ps.editor.filter.SecuredPageFilter.doFilter(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.lmig.cm.ps.editor.user.UserFilter.handleDeveloperEnvironment(Unknown Source)
at com.lmig.cm.ps.editor.user.UserFilter.doFilter(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.lmig.cm.ps.editor.filter.SessionTimeoutFilter.doFilter(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Wenn ich entfernen Sie den Abschnitt von layout.xhtml:
<h:head>
<title><ui:insert name="title">Default Title</ui:insert></title>
<h:outputStylesheet library="theme" name="main.css" />
</h:head>
Die Seite laden (natürlich ohne css oder Titel). Auch wenn ich nur in die Seite:
<h:head>
</h:head>
Es nicht machen, und ich die gleiche Fehlermeldung erhalten.
Arbeite ich schon eine ganze Weile, und kann nicht herausfinden, was ich falsch mache. Meine Vermutung ist, dass es hat etwas zu tun mit der version der Gläser habe ich noch, aber tauschen die meisten von Ihnen aus, noch nicht führte zu einer Lösung.
Hat jemand irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schauen wir uns die
StylesheetRenderer#encodeEnd()
Quelle (ich bin mit Mojarra 2.1.4; ich gehe davon aus, dass Sie auch mit es wie die meisten, wenn nicht allecom.sun.faces
Zeilennummern in Ihrem stack-trace zu 100% übereinstimmen mit der Quelle; in Zukunft jedoch bitte genaue version):So,
resourceUrl
istnull
irgendwie.Schauen wir uns
ExternalContext#encodeResourceURL(String)
Quelle:D ' Oh, es ist Abstrakt. Gut, schauen wir uns die Standard-Implementierung Mojarra, die
com.sun.faces.context.ExternalContextImpl
:Ach, die Delegierten zu
HttpServletResponse#encodeURL()
, die sollten standardmäßig nicht zurücknull
überhaupt.So, kann dein problem zumindest 2 mögliche Ursachen:
ExternalContext
Umsetzung, die nicht tun, Ihre Arbeit inencodeResourceURL()
richtig.HttpServletResponseWrapper
Umsetzung, die nicht tun, Ihre Arbeit inencodeURL()
richtig.Setzen einen debugger-Haltepunkt auf Zeile 106 von
StylesheetRenderer
- und debugging von dortsollten Ihnen sagen, welche Implementierungen verwendet worden.
Dass die gleiche Ausnahme tritt auf, wenn Sie entfernen die
<h:outputStylesheet>
ist wahrscheinlich, weil RichFaces implizit fügt diese Komponenten dort auch für eigene stylesheets. Auf Grundlage der XML-namespace-Deklarationen, bist du mit RichFaces.HttpServletResponse#encodeURL()
(unerwartet!) keine NPE werfen, wenn Sie passnull
hinein. Was die Umsetzung derResource
Klasse?/WEB-INF/lib
? Es gibt 4, zusammen mit 3 Abhängigkeiten.