Ich hatte dieses Problem auch und bin der Ursache erst auf die Spur gekommen, nachdem ich die Webkonsole des Browsers geöffnet hatte. Bis dahin konnte ich keine Fehlermeldungen erhalten (auch nicht mit <p:messages>
). Die Webkonsole zeigte einen HTTP 405-Statuscode an, der von der <h:commandButton type="submit" action="#{myBean.submit}">
.
In meinem Fall habe ich eine Mischung aus Vanilla HttpServlets, die OAuth-Authentifizierung über Auth0 bereitstellen, und JSF-Facelets und -Beans, die meine Anwendungsansichten und Geschäftslogik ausführen.
Nachdem ich meine web.xml umgestaltet und ein Middle-Man-Servlet entfernt hatte, funktionierte es "auf magische Weise".
Unterm Strich war das Problem, dass der Mittelmann-Servlet mit RequestDispatcher.forward(...) von der HttpServlet-Umgebung an die JSF-Umgebung umleiten, während das Servlet, das vor ihm aufgerufen wurde, mit HttpServletResponse.sendRedirect(...) umgeleitet wurde.
Grundsätzlich erlaubte die Verwendung von sendRedirect() dem JSF-"Container", die Kontrolle zu übernehmen, während dies bei RequestDispatcher.forward() offensichtlich nicht der Fall war.
Was ich nicht weiß, ist, warum das Facelet in der Lage war, auf die Bean-Eigenschaften zuzugreifen, sie aber nicht einstellen konnte, und dies schreit eindeutig nach einer Abschaffung der Mischung aus Servlets und JSF, aber ich hoffe, dass dies jemandem hilft, viele Stunden des Kopf-an-Tisch-Schlagens zu vermeiden.