Caused by: java.lang.IllegalStateException: The window outpu
viggo.navarsete Feb 7, 2008 3:42 AMFrom time to time I get an exception as described in the subject, and I'm really not sure how to handle it. I'm developing a Richfaces portlet, and it's often when I use richfaces components that I get this exception. If I rewrite things to only use standard JSF components it normally works. Any suggestion what could cause such an exception?
The stacktrace is here:
Caused by: javax.portlet.faces.BridgeException: Error processing render lifecycle at org.ajax4jsf.portlet.ExceptionHandlerImpl.processRenderException(ExceptionHandlerImpl.java:31) at org.ajax4jsf.portlet.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:211) at javax.portlet.faces.GenericFacesPortlet.doFacesDispatch(GenericFacesPortlet.java:142) ... 237 more Caused by: javax.faces.FacesException: java.lang.IllegalStateException: The window output stream is already used at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144) at org.ajax4jsf.portlet.AbstractAjaxBridge.render(AbstractAjaxBridge.java:118) at org.ajax4jsf.portlet.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:187) ... 238 more Caused by: java.lang.IllegalStateException: The window output stream is already used at org.jboss.portal.portlet.invocation.response.FragmentResponse.getWriter(FragmentResponse.java:181) at org.jboss.portal.portlet.impl.jsr168.api.RenderResponseImpl.getWriter(RenderResponseImpl.java:118) at org.ajax4jsf.portlet.application.PortletViewHandler.renderView(PortletViewHandler.java:185) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) ... 241 more
and the xhtml file is here (I'm using facelets):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<a4j:portlet>
<style>
.searchResult {
margin: 0;
padding: 0;
border: 0;
}
.treeContent {
width:450px;
vertical-align:top;
horizontal-align:left;
margin: 0;
padding: 0;
}
.treeDetails {
width:830px;
vertical-align:top;
horizontal-align:right;
margin: 0;
padding: 0;
}
.treeLink {
text-decoration: none;
color: black;
}
.treeLink:hover {
text-decoration: underline;
}
.summaryGrid {
width: 100%;
margin: 0;
padding: 0;
border: 0;
}
.resultscroller {
overflow: auto;
height: 700px;
}
.summaryscroller {
overflow: auto;
height: 500px;
}
.entityIcon {
vertical-align: middle;
margin-right: 5px;
}
.basicDetails {
padding-left: 4px;
}
.complexDetails {
margin: 4px;
}
.infoMessage {
color: red;
}
.selectedNode {
background-color:#BED6F8;
}
</style>
<rich:separator height="1" />
<h:form>
<rich:panel id="searchInputPanel">
<f:facet name="header" >
<f:verbatim>Search input</f:verbatim>
</f:facet>
<h:panelGrid columns="3">
<h:outputText value="Name:" />
<h:inputText value="#{searchBean.searchString}" />
<h:commandButton value="Say Hello" action="#{searchBean.search}"/>
</h:panelGrid>
</rich:panel>
<rich:panel id="searchResultPanel" style="borderich:0;" bodyClass="searchResult">
<h:panelGrid columnClasses="treeContent, treeDetails" columns="2" cellpadding="0" cellspacing="0">
<rich:panel bodyClass="resultscroller">
<f:facet name="header">
<f:verbatim>Search Result</f:verbatim>
</f:facet>
<rich:tree switchType="ajax" value="#{searchBean.searchResultNode.data}" var="item" nodeFace="#{item.type}" selectedClass="selectedNode">
<rich:treeNode highlightedClass="treeLink" type="organizationNode">
<h:selectBooleanCheckbox value="#{item.selected}">
<a4j:support event="onclick" actionListener="#{item.selectDetailsForSummary}" reRender="summaryPanel"/>
</h:selectBooleanCheckbox>
<a4j:commandLink styleClass="treeLink" reRender="detailsPanel,tbuPanel" actionListener="#{item.lookupDetails}" value="#{item.organizationName}"/>
</rich:treeNode>
<rich:treeNode highlightedClass="treeLink" type="entityNode">
<h:selectBooleanCheckbox value="#{item.selected}">
<a4j:support event="onclick" actionListener="#{item.selectDetailsForSummary}" reRender="summaryPanel"/>
</h:selectBooleanCheckbox>
<a4j:commandLink styleClass="treeLink" reRender="detailsPanel,tbuPanel" actionListener="#{item.lookupDetails}" value="#{item.entityId}"/>
</rich:treeNode>
</rich:tree>
</rich:panel>
</h:panelGrid>
</rich:panel>
</h:form>
</a4j:portlet>
</f:view>
I'm running Richfaces 3.1.3.GA.