JSF 2.2 アプリケーションで注釈付きの URL リライターを使用したいので、Rewrite
(PrettyFaces
後継者 ) をいじり始めました。
私のアプリケーションはまだ 7.x で実行されている単なる Hello World であり、TomEE
特別な依存関係はないと思います。no web.xml
、 empty faces-config.xml
、 empty で実行しますbeans.xml
。
テスト用に新しい専用バッキング Bean と xhtml を作成しましたRewrite
。問題は、Url にパラメーターを追加するたびに、応答がコミットされた後にセッションを作成できませんIllegalStateException
。
3.3.3にダウングレードしようとしましPrettyFaces
たが、まったく同じエラーが発生します。
バッキング Bean のコードは次のとおりです。
@Named
@javax.enterprise.context.RequestScoped
@URLMapping(id = "testroot", pattern = "/testRoot/#{testRootView.bar}", viewId = "xyz/TestRoot.jsf")
public class TestRootView implements Serializable {
String foo = "my first String";
String bar ="";
// getters and setters ...
}
とビュー
<?xml version="1.0" encoding="UTF-8"?>
<body jsf:id="root-body" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<p>
This is my string : #{testRootView.foo}
</p>
<p>
And this is another string : #{testRootView.bar}
</p>
</body>
アクセス時のスタックトレースhttp://localhost:8080/testRoot/aaa
java.lang.IllegalStateException: 応答がコミットされた後にセッションを作成できません org.apache.catalina.connector.Request.doGetSession(Request.java:2952) 2361) org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:896) javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231) javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java: 231) org.apache.myfaces.context.servlet.SessionMap.setAttribute(SessionMap.java:56) org.apache.myfaces.util.AbstractThreadSafeAttributeMap.put(AbstractThreadSafeAttributeMap.java:109) org.apache.myfaces.util.AbstractThreadSafeAttributeMap. put(AbstractThreadSafeAttributeMap.java:38) org.apache.myfaces.application.viewstate.ServerSideStateCacheImpl.saveSerializedViewInServletSession(ServerSideStateCacheImpl.java:250) org.apache.myfaces.application.viewstate.ServerSideStateCacheImpl.saveSerializedView(ServerSideStateCacheImpl.java:642) org.apache.myfaces.renderkit.html.HtmlResponseStateManager.saveState(HtmlResponseStateManager.java:138) org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:279) org.apache.myfaces.shared.view.JspViewDeclarationLanguageBase.renderView(JspViewDeclarationLanguageBase.java:220) org.apache.myfaces.application.ViewHandlerImpl.renderView( ViewHandlerImpl.java:313) com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) org.omnifaces.viewhandler.OmniViewHandler.renderView(OmniViewHandler.java:115) org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle. LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces.TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat. websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)execute(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces. TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft. pretty.PrettyFilter.doFilter(PrettyFilter.java:137)execute(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces. TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft. pretty.PrettyFilter.doFilter(PrettyFilter.java:137)ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)
パターン ( ) からパラメーターを削除してpattern = "/testRoot"
アクセスhttp://localhost:8080/testRoot
すると、問題はなく、ビューが適切にレンダリングされることに注意してください。
私は何を間違っていますか?(prettyfaces のバージョンを指定しました。Rewrite のバージョンも指定でき@Join
ますが、エラーは同じであるため、問題は別の場所にあると思います...)