내 JSF 2.2 응용 프로그램에서 주석을 사용하여 URL 재 작성자를 사용하려고하므로 Rewrite
(PrettyFaces
후계자) .매개 변수가있는 Rewrite/PrettyFaces가 IllegalStateException을 발생시킵니다. 응답이 커밋 된 후 세션을 만들 수 없습니다.
내 응용 프로그램은 아직도 TomEE
7.x에서 실행되는 안녕하세요. 여기에는 멋진 의존성이 없습니다. 나는 web.xml
, 빈 faces-config.xml
및 빈 beans.xml
으로 실행됩니다.
Rewrite
을 테스트 할 수있는 새로운 전용 백업 콩과 XHTML을 만든
이 문제가 , 나는 IllegalStateException
얻을 : 응답이 커밋 된 후에 세션을 만들 수 없습니다
나는 3.332로 PrettyFaces
으로 다운 그레이드를 시도했지만 정확히 같은 오류가 발생합니다. 여기
http://localhost:8080/testRoot/aaa
java.lang.IllegalStateException에 액세스 할 때 백업의 콩
@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>
및 스택 추적입니다 : 할 수 없습니다 응답이 커밋 된 후 세션 만들기 org.apache.catalina.connector.Request.doGetSession (Request.java:2952) org.apache.catalina.connector.Request.getSession (Request.java: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. (AbstractThreadSafeAttributeMap.java:38) org.apache.myfaces.util.AbstractThreadSafeAttributeMap.put (AbstractThreadSafeAttributeMap.java:38) org.apache.myfaces.application.viewstate.ServerSideS tateCacheImpl.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) 012 3,516,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 나는 패턴 (
pattern = "/testRoot"
)에서 매개 변수를 제거하고 있다면 액세스하는 것이 .PrettyFilter.doFilter (PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter (PrettyFilter.java:137)
주 http://localhost:8080/testRoot
문제가 없으며보기가 잘 렌더링됩니다.
내가 뭘 잘못하고 있니? (나는 prettyfaces로 버전을 주었고 Rewrite의 @Join
도 제공 할 수 있습니다. 그러나 문제는 다른 곳의 에러라고 생각합니다 ...)
'viewId' 속성이 올바른지 다시 한번 확인해 주실 수 있습니까? 절대 viewId (예 :'/ xyz/TestRoot.jsf')를 사용해야합니다. 슬래시 ('/ testRoot/# {testRootView.bar} /')를 추가하여 패턴을 변경하려고 할 수도 있습니다. 왜냐하면 일부 구석의 경우 꽤 많이 이상한 동작을하기 때문입니다. – chkal