Why can't I get ViewScope to work? Throws errors every time

天涯浪子 提交于 2020-01-07 03:12:15

问题


Ok I'm trying to do something real simple. Just to note this works fine with SessionScope. I have a datatable and when I select a row it needs to update a form that a user could edit. Every time I try and fire the row selector it comes back with this.

    SEVERE: Error Rendering View[/index.xhtml]
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2867)
    at org.apache.catalina.connector.Request.getSession(Request.java:2561)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:920)
    at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155)
    at com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175)
    at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)
    at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166)
    at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    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:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    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:662)

INFO: Exception when handling error trying to reset the response.
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2867)
    at org.apache.catalina.connector.Request.getSession(Request.java:2561)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:920)
    at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155)
    at com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175)
    at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)
    at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166)
    at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    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:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    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:662)

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2867)
    at org.apache.catalina.connector.Request.getSession(Request.java:2561)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:920)
    at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155)
    at com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175)
    at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)
    at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166)
    at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    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:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    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:662)

I feel like this is something that is common to do but I can't make it work.

This is my page.

<p:growl id="growl" showDetail="true"/>

<h:form id="contactsForm">
    <p:panel id="contactsPanel" >
        <p:dataTable id="contactsTable" value="#{viewContacts.contactsList}" selection="#{editContacts.contact}" widgetVar="contactsTable" var="contacts"
                     rowSelectListener="#{viewContacts.rowSelect}" rowUnselectListener="#{viewContacts.rowUnSelect}"
                     onRowUnselectUpdate="editContactsForm" onRowSelectUpdate="editContactsForm"
                     selectionMode ="single"
                     paginator="true" rows ="15"                                 
                     rowsPerPageTemplate="5,10,15,25,50,100" 
                     paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                     >                     

            <f:facet name="header">                     
                <p:outputPanel>
                    <h:outputText value="Search:" />
                    <p:inputText id="globalFilter" onkeyup="contactsTable.filter()"  style="width:150px" />                
                </p:outputPanel>
            </f:facet>

            <p:column filterStyle="display:none"  filterBy="#{contacts.name}" headerText="Name" style="width:200px">
                <h:outputText value="#{contacts.name}" />
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.street}" headerText="Street" style="width:280px">
                <h:outputText value="#{contacts.street}" />                     
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.city}" headerText="City" style="width:150px">
                <h:outputText value="#{contacts.city}" />
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.state}" headerText="State" style="width:50px">
                <h:outputText value="#{contacts.state}" />
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.zip}" headerText="Zip" style="width:100px">
                <h:outputText value="#{contacts.zip}" />
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.country}" headerText="Country" style="width:150px">
                <h:outputText value="#{contacts.country}" />
            </p:column>

            <p:column filterStyle="display:none" filterBy="#{contacts.sent}" headerText="Sent" style="width:50px">
                <h:outputText value="#{contacts.sent}" />
            </p:column> 
        </p:dataTable>
    </p:panel>
</h:form>

<br />
<br />


<h:form id="editContactsForm">

    <p:panel id="editContactsPanel" rendered="#{editContacts.panelRendered}" closable="true" toggleable="true" >

            <br />
            <br />

            <h:panelGrid id="editContactsPanelGrid" cellpadding="2" cellspacing="2" columns="3">

                <h:outputText value="Name :" />
                <p:inputText id="name" value="#{editContacts.contact.name}" style="width:400px" />
                <p:message for="name" />

                <h:outputText value="Email :" />
                <p:inputText id="email" value="#{editContacts.contact.email}" style="width:400px"/>

                <p:message id="emailMsg" for="email" />

                <h:outputText value="Street :" />
                <p:inputText id="street" value="#{editContacts.contact.street}" style="width:400px" />
                <p:message for="street" />

                <h:outputText value="City :" />
                <p:inputText id="city" value="#{editContacts.contact.city}" style="width:400px" />
                <p:message for="city" />

                <h:outputText value="State :" />
                <p:inputText id="state" value="#{editContacts.contact.state}" style="width:400px" >                                                   
                </p:inputText>
                <p:message id="stateMsg" for="state" />

                <h:outputText value="Country :" />
                <p:inputText id="country" value="#{editContacts.contact.country}" style="width:400px" />
                <p:message for="country" />

                <h:outputText value="Phone :" />
                <p:inputText id="phone" value="#{editContacts.contact.phone}" style="width:400px"/>
                <p:message id="phoneMsg" for="phone" />

                <h:outputText value="Guests :" />
                <p:inputText id="guests" value="#{editContacts.contact.guests}" style="width:400px"/>
                <p:message for="guests" />

                <h:outputText value="Arrival :" />
                <p:calendar id="arrival" value="#{editContacts.contact.arrival}" showOn="button" />
                <p:message for="arrival" />

                <h:outputText value="Departure :" />
                <p:calendar id="departure" value="#{editContacts.contact.departure}" showOn="button" />
                <p:message for="departure" />

                <h:outputText value="Message :" />
                <p:inputTextarea id="message" effectDuration="30" style="width:400px;height:100px;" value="#{editContacts.contact.message}"  />
                <p:message for="message" />

                <h:outputText value="Departure :" />
                <p:calendar id="inserted" value="#{editContacts.contact.inserted}" showOn="button"/>
                <p:message for="inserted" />

                <h:outputText value="Sent :" />
                <h:selectBooleanCheckbox id="sent" value="#{editContacts.contact.sent}" />
                <p:message for="sent" />
                <br />

            </h:panelGrid>             

            <p:commandButton value="Submit" action="#{editContacts.doEditContact}" update="contactsForm, growl, phoneMsg" />

        </p:panel>

</h:form>

Backing bean.

@ManagedBean
@ViewScoped
public class ViewContacts implements Serializable {

    @EJB
    ContactService contactService;
    @Inject
    EditContacts editContacts;
    private List<Contacts> contactsList;

    public ViewContacts() {

        contactsList = new ArrayList<Contacts>();
    }

    @PostConstruct
    public void onLoad() {

        updateContactsList();
    }

    public void rowSelect(SelectEvent event) {      

        editContacts.setPanelRendered(true);
        editContacts.setContact((Contacts) event.getObject());
    }

    public void rowUnSelect(UnselectEvent event) {

        editContacts.setContact(new Contacts());
        editContacts.setPanelRendered(false);
    }

    public void updateContactsList() {

        contactsList.clear();
        contactsList = contactService.findAll();
    }

    public List<Contacts> getContactsList() {
        return contactsList;
    }

    public void setContactsList(List<Contacts> contactsList) {
        this.contactsList = contactsList;
    }
}

Thanks for any help.


回答1:


Ok. I didn't read view scope properly. You can only have one form per page. The bean is created multiple times if you have more than one form. Good luck!



来源:https://stackoverflow.com/questions/5098744/why-cant-i-get-viewscope-to-work-throws-errors-every-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!