Переписать / PrettyFaces с параметром вызывает IllegalStateException: не удается создать сеанс после того, как ответ был принят

Я хочу использовать в своем приложении JSF 2.2 несколько рераймеров URL с аннотациями, так что я начал играть с Rewrite (PrettyFaces преемник).

Мое приложение все еще просто привет TomEE 7.х, здесь нет никаких причудливых зависимостей. Я бегу без web.xmlпустой faces-config.xml и пусто beans.xml,

Я создал новый специальный бэк и xhtml для тестирования Rewriteпроблема заключается в том, что всякий раз, когда я добавляю параметр в URL, я получаю IllegalStateException: Не удается создать сеанс после подтверждения ответа

Я пытался понизить до PrettyFaces 3.3.3 но точно такая же ошибка происходит.

Вот код Поддерживающего Боба

@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) org.apache.catalina.connector.Request.getSession(Request.java:2361) org.apache.catalina.connector. 231) org.apache.myfaces.context.servlet.SessionMap.setAttribute(SessionMap.java:56) org.apache.myfaces.util.AbstractThreadSafeAttributeMap.put(AbstractThreadSafeAttributeMap.java:109) org.aptilSAa.Abject.Ab put(AbstractThreadSafeAttributeMap.java:38) org.apache.myfaces.application.viewstate.ServerSideStateCacheImpl.saveSerializedViewInServletSession(ServerSideStateCacheImpl.java:250) org.apache.myfaces.application.verSideSaveSerStateSerSteSerSteSerSteSerSerStateSerSteSerSteSerStateSerSteSerSerStateSerStateSerSteSerStateSerSerStateSerStateSerSteSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSerStateSer. rSideStateCacheImpl.java:642) org. расшаренный 163) javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) org.omnifaces.viewhandler.OmniViewHandler.jniViewer) (O) org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServletServlet.ervlet.service(200) org.apache.tomee.myfaces.TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFF ((.45).ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)

Обратите внимание, что если я удаляю параметр из шаблона (pattern = "/testRoot") и я доступ http://localhost:8080/testRoot нет проблем, и вид хорошо представлен.

Что я делаю неправильно? (Я дал версию с красивыми лицами, я могу дать версию с переписать @Join тоже, но я думаю, что проблема в другом месте, так как ошибка та же...)

1 ответ

Решение

Благодаря chkal, я нашел проблему, это было действительно отсутствие рута ('/') в viewId поле (или to поле в Rewrite версия).

Добавление его решило эту проблему. Мне все еще интересно, где мой код будет искать сессию для этого, и что бы он сделал, если бы нашел такую ​​:)

Другие вопросы по тегам