Closed BalusC closed 8 months ago
Maybe this one broke some logic or there is something I must change on using ui:composition now because of the contract change? We have a place similar to this tutorial: https://javaee.github.io/tutorial/jsf-facelets008.html#:~:text=Resource%20library%20contracts%20allow%20you,section%20of%20your%20web%20application.
with a
<faces-config>
<application>
<resource-library-contracts>
<contract-mapping>
<url-pattern>*</url-pattern>
<contracts>default</contracts>
</contract-mapping>
</resource-library-contracts>
</application>
</faces-config>
Now when I debug I see that template.xhtml is resolved into: file:/C:/../testContractMappings/webapp/contracts/default/template.xhtml which is correct. but because isContractsResource is true, which is also correct for that, I will get "IOException: Contract resources cannot be accessed this way" from DefaultFacelet.
Caused by: jakarta.faces.view.facelets.TagAttributeException: /test.xhtml @2,96 <ui:composition template="template.xhtml"> Invalid path : template.xhtml
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:134)
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:52)
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:46)
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:132)
at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:331)
at jakarta.faces.impl@4.0.5//com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:70)
at jakarta.faces.impl@4.0.5//com.sun.faces.lifecycle.Phase.doPhase(Phase.java:72)
at jakarta.faces.impl@4.0.5//com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:150)
at jakarta.faces.impl@4.0.5//jakarta.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:692)
... 45 more
Caused by: java.io.IOException: Contract resources cannot be accessed this way
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:298)
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:154)
at jakarta.faces.impl@4.0.5//com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:129)
... 53 more
Now after the change, can't ui:composition be used with contract-mapping-s any more or maybe I must change something in the mapping to get it working with contracts again? We have not set jakarta.faces.WEBAPP_CONTRACTS_DIRECTORY.
Refactor retrieval and validation of webapp contracts directory into a single place and fixed a couple of misassumptions about it always being an absolute path.
https://github.com/eclipse-ee4j/mojarra/issues/5329