0

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ますが、エラーは同じであるため、問題は別の場所にあると思います...)

4

1 に答える 1

0

chkalのおかげで、問題が見つかりました。実際には、viewIdフィールド (またはバージョンのtoフィールド) にルート (「/」) がありませんでした。Rewrite

それを追加すると、この問題は解決しました。私のコードがそのためのセッションをどこで検索するのか、それが見つかった場合に何をするのか、まだ疑問に思っています:)

于 2016-10-25T18:06:14.230 に答える