eclipse-ee4j / mojarra

Mojarra, a Jakarta Faces implementation
Other
158 stars 107 forks source link

show which viewId was not found in exception #5432

Closed codylerum closed 3 months ago

codylerum commented 3 months ago

when migrating to extensionless I had an issue in production where I was getting an exception

2024-04-01 14:04:46,373 SEVERE [jakarta.enterprise.resource.webcontainer.faces.application] (default task-347) Error Rendering View[/s/home.xhtml]: com.sun.faces.application.view.ViewHandlingStrategyNotFoundException
    at java.base/java.util.Optional.orElseThrow(Optional.java:403)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.ViewHandlingStrategyManager.getStrategy(ViewHandlingStrategyManager.java:57)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.ViewDeclarationLanguageFactoryImpl.getViewDeclarationLanguage(ViewDeclarationLanguageFactoryImpl.java:45)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.MultiViewHandler.getViewDeclarationLanguage(MultiViewHandler.java:408)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.MultiViewHandler.derivePhysicalViewId(MultiViewHandler.java:461)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.view.MultiViewHandler.deriveViewId(MultiViewHandler.java:423)
    at deployment.ROOT.war//org.ocpsoft.rewrite.faces.RewriteViewHandler.deriveViewId(RewriteViewHandler.java:155)
    at jakarta.faces.impl@4.0.5//jakarta.faces.application.ViewHandlerWrapper.deriveViewId(ViewHandlerWrapper.java:172)
    at jakarta.faces.impl@4.0.5//jakarta.faces.application.ViewHandlerWrapper.deriveViewId(ViewHandlerWrapper.java:172)
    at jakarta.faces.impl@4.0.5//com.sun.faces.application.NavigationHandlerImpl.findImplicitMatch(NavigationHandlerImpl.java:945)

This ended up being because I had an h:link with an outcome which had a trailing slash.

<h:link outcome="/s/profile/two-step.xhtml/">Click here to get started</h:link>

This worked previously before enabling extensionless. This would have been much easier to track down if the viewId in question had been printed in the exception message.

This PR adds a useful message to the exception and fixes a doc typo in the same class