Servlets JSF2&x2B;漂亮脸蛋->;已为此响应调用了IllegalStateException:PWC3990:getWriter()
我有一个JavaEE应用程序,它有JSF2+PrettyFaces+Facelets+EJB3+EclipseLink 如上所述,由于JSF2+Faceletes渲染模型与PrettyFaces和h:link标记一起工作时存在一些不一致,我不断遇到一个非法状态异常 根据使用JSF2+Faceletes时的良好实践,我删除了所有旧的JSTL标记和所有commandLink标记 在web.xml中:Servlets JSF2&x2B;漂亮脸蛋->;已为此响应调用了IllegalStateException:PWC3990:getWriter(),servlets,jsf-2,facelets,prettyfaces,Servlets,Jsf 2,Facelets,Prettyfaces,我有一个JavaEE应用程序,它有JSF2+PrettyFaces+Facelets+EJB3+EclipseLink 如上所述,由于JSF2+Faceletes渲染模型与PrettyFaces和h:link标记一起工作时存在一些不一致,我不断遇到一个非法状态异常 根据使用JSF2+Faceletes时的良好实践,我删除了所有旧的JSTL标记和所有commandLink标记 在web.xml中: <?xml version="1.0" encoding="UTF-8"?> <w
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>atlPortal</display-name>
<context-param>
<param-name>com.sun.faces.prefer.XHTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/facelets/customTags.taglib.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>com.mindvortex.atl.web.common.servlet.ImageServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/image/*</url-pattern>
<url-pattern>/pages/image/*</url-pattern>
<url-pattern>/pages/protected/image/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
<async-supported>false</async-supported>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<!-- servlets and such would be above -->
<login-config>
<auth-method>FORM</auth-method>
<realm-name>userauth</realm-name>
<form-login-config>
<form-login-page>/login.faces</form-login-page>
<form-error-page>/loginError.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>Block All XHTML</display-name>
<web-resource-collection>
<web-resource-name>blockXHTML</web-resource-name>
<description></description>
<url-pattern>*.xhtml</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint />
</security-constraint>
<security-constraint>
<display-name>ConstraintSSL</display-name>
<web-resource-collection>
<web-resource-name>protected</web-resource-name>
<description/>
<url-pattern>/pages/protected/*</url-pattern>
<url-pattern>/login/*</url-pattern>
<url-pattern>/login.*</url-pattern>
<url-pattern>/account/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<user-data-constraint>
<description>SSL not required for Development</description>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<display-name>ConstraintUser</display-name>
<web-resource-collection>
<web-resource-name>user</web-resource-name>
<description/>
<url-pattern>/account/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ADMINISTRATORS</role-name>
<role-name>USERS</role-name>
</auth-constraint>
<user-data-constraint>
<description>SSL not required for Development</description>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role>
<description/>
<role-name>USERS</role-name>
</security-role>
<security-role>
<description/>
<role-name>ADMINISTRATORS</role-name>
</security-role>
<session-config>
<session-timeout>30</session-timeout>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
<welcome-file-list>
<welcome-file>init.faces</welcome-file>
</welcome-file-list>
</web-app>
未调用commentsMB.save Bean操作,我得到一个页面未找到错误,日志中抛出异常
堆栈跟踪:
[#|2012-03-30T13:47:54.968-0300|SEVERE|glassfish3.1.1|org.apache.jasper.servlet.JspServlet|_ThreadID=25;_ThreadName=http-thread-pool-8084(4);|PWC6117:
File "C%3A%5CGBL%5Cprop%5Cprogs%5Cglassfish-3.1.1%5Cglassfish3%5Cglassfish%5Cdomains%5Cdomain1%5Capplications%5CatlanteusEAR%5CatlanteusPortal-1.0.0_
war%5Ccomments%5Csave%5CcontactUs.jsp" not found|#]
[#|2012-03-30T13:47:54.976-0300|WARNING|glassfish3.1.1|org.apache.catalina.core.ApplicationDispatcherForward|_ThreadID=25;_ThreadName=http-thread-pool
-8084(4);|Exception processing ErrorPage[errorCode=404, location=/pages/error/error404.xhtml]
java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:370)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
at org.apache.catalina.core.ApplicationDispatcherForward.custom(ApplicationDispatcherForward.java:253)
at org.apache.catalina.core.ApplicationDispatcherForward.status(ApplicationDispatcherForward.java:209)
at org.apache.catalina.core.ApplicationDispatcherForward.commit(ApplicationDispatcherForward.java:131)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:353)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:619)
|#]
虽然我只使用XHTML,但JSF似乎将导航解释为.jsp
有人能帮我找出我做错了什么吗?自从我开始使用JSF2+Facelets以来,这是我的主要问题。您的“contactUs.faces”视图id值前面不需要斜杠“/”吗 我认为应该是: “/contactUs.faces”,对吗
~Lincoln在考虑了答案后,我提出了最终的解决方案,因此我将在这里发布,供其他人理解:
<url-mapping id="viewContactUs">
<pattern value="/contactUs/" />
<view-id value="/pages/contactUs.faces" />
<action>#{commentsMB.openContactUs}</action></url-mapping>
#{commentsMB.openContactUs}
<navigation-case>
<from-outcome>contactUs</from-outcome>
<to-view-id>/pages/contactUs.xhtml</to-view-id>
</navigation-case>
联系人
/pages/contactUs.xhtml
将被删除或注释掉。完成此操作后,实际的导航映射将仅出现在pretty-config.xml中,并且将与PrettyFaces筛选器一起正常工作。请编辑您的问题以包含stacktrace。通过这种方式,我们可以找出谁在试图写信给回复作者,而回复作者显然不应该这样做。@BalusC按照您的建议做了,谢谢!好的,是PrettyFaces的
PrettyFilter
没有检查响应是否已提交。好吧,至少你自己的代码被排除在原因之外。我将把这个问题留给那些更熟悉漂亮面孔的人。这可能是PrettyFaces本身的一个bug,也可能是对pretty config.xml
的错误配置。我看到了许多与JSF相关的帖子,我将JSF2与Facelets一起使用,因为建议不要使用commandLink和JSTL,对于我可以使用的基于托管Bean操作方法提供导航的任何其他标记,您有什么建议吗?这不会和已经调用的getWriter的问题一样吗?提前感谢。您的问题是由PrettyFaces引起的,而不是由JSF/Facelets引起的。你的JSF/Facelets代码非常好。Lincoln,当我使用a/slash时,链接URL无法解析:[#|2012-03-30T13:32:49.050-0300 |警告| glassfish3.1.1 | javax.enterprise.resource.webcontainer.JSF.renderkit | u ThreadID=21;| u ThreadName=http线程池-8084(5);| JSF1090:组件注释的导航案例未解析。|,这是因为此路径需要完全限定。您需要指定JSF资源的完整路径。我尝试使用JSF资源的完全限定路径,但没有成功,我的页面位于:/pages/contactUs.xhtml-但在我在faces-config.xml中使用的pretty-config.xml中,我有contactUs/pages/contactUs.xhtml,该模式适用于我应用程序中的所有页面。唯一的问题是当我有两个连续的链接呈现与美丽的脸。你有什么建议吗?提前谢谢。为什么要混合导航案例和pretty-config.xml?我会使用其中一个。这可能是您的问题,但这里肯定存在配置问题。如果您想在OCPsoft支持论坛上发布帮助,我们可能会在那里提供更多帮助。因为你可以发布你的整个堆栈跟踪和项目文件。我能猜到的唯一线索是你收到的错误不是根本原因。显示错误页面时出现问题,这意味着是其他错误导致了该问题,然后错误页面也恰好无法显示。寻找第一个错误,你应该找到你的问题。澄清。导航规则是否存在并不重要——除非使用
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>contactUs</from-outcome>
<to-view-id>/pages/contactUs.xhtml</to-view-id>
<redirect /></navigation-case>
<div class="form_row">
<h:link id="commentsSave" outcome="pretty:commentsSave" styleClass="contact">
#{msg.send}
</h:link>
</div>
<url-mapping id="commentsSave">
<pattern value="/comments/save/" />
<view-id value="contactUs.faces" />
<action>#{commentsMB.save}</action>
</url-mapping>
public String save() {
return save(this.getEntity());
}
[#|2012-03-30T13:47:54.968-0300|SEVERE|glassfish3.1.1|org.apache.jasper.servlet.JspServlet|_ThreadID=25;_ThreadName=http-thread-pool-8084(4);|PWC6117:
File "C%3A%5CGBL%5Cprop%5Cprogs%5Cglassfish-3.1.1%5Cglassfish3%5Cglassfish%5Cdomains%5Cdomain1%5Capplications%5CatlanteusEAR%5CatlanteusPortal-1.0.0_
war%5Ccomments%5Csave%5CcontactUs.jsp" not found|#]
[#|2012-03-30T13:47:54.976-0300|WARNING|glassfish3.1.1|org.apache.catalina.core.ApplicationDispatcherForward|_ThreadID=25;_ThreadName=http-thread-pool
-8084(4);|Exception processing ErrorPage[errorCode=404, location=/pages/error/error404.xhtml]
java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:370)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
at org.apache.catalina.core.ApplicationDispatcherForward.custom(ApplicationDispatcherForward.java:253)
at org.apache.catalina.core.ApplicationDispatcherForward.status(ApplicationDispatcherForward.java:209)
at org.apache.catalina.core.ApplicationDispatcherForward.commit(ApplicationDispatcherForward.java:131)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:353)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:619)
|#]
<url-mapping id="viewContactUs">
<pattern value="/contactUs/" />
<view-id value="/pages/contactUs.faces" />
<action>#{commentsMB.openContactUs}</action></url-mapping>
<navigation-case>
<from-outcome>contactUs</from-outcome>
<to-view-id>/pages/contactUs.xhtml</to-view-id>
</navigation-case>