2013-03-07 75 views
1

我正在开发其显示datatable相同,如图primefaces页面奇怪的错误showcase.But它并不像that.When工作,我运行一个或两行它的工作页面,但是当我运行有超过两行服务器的页面显示错误[如果我设置datatableeditable那么它不工作,要么] .Problem解决当我设置bean来代替session scopedrequest or view。问题是为什么它不适用于请求或查看范围?Primefaces与数据表

来源:

页:

    <p:dataTable var="club" value="#{currentClubItems.clubItems}" id="clubs" 
         > 

         <p:ajax event="rowEdit" listener="#{currentClubItems.onEdit}" update=":form:messages"/> 

         <p:column headerText="Main Category" style="width:15%"> 
          <p:cellEditor> 
           <f:facet name="output"> 
            <h:outputText value="#{club.mainCategory}"/> 
           </f:facet> 
           <f:facet name="input"> 
            <p:selectOneMenu value="#{club.mainCategory}" editable="true"> 
             <f:selectItems value="#{currentClubItems.categories}" 
                 var="ct" 
                 itemLabel="#{ct}" 
                 itemValue="#{ct}"/> 
            </p:selectOneMenu> 
           </f:facet> 
          </p:cellEditor> 
         </p:column> 

         <!-- other coloms--> 

         <p:column style="width:5%"> 
          <p:rowEditor/> 
         </p:column> 

        </p:dataTable> 

豆:

@ViewScoped 
@ManagedBean(name = "currentClubItems") 
public class CLMItems implements Serializable { 
    private List<ClubItem> clubItems; 

    public CLMItems(){ 
     clubItems=new ArrayList<ClubItem>(); 

     ClubItem clubItem=new ClubItem(); 
     clubItem.setId("1"); 
     clubItem.setMainCategory("category"); 
     clubItem.setSubCategory("sub category"); 
     clubItem.setMerchant("Merchant"); 
     clubItem.setOffer("Content goes here.."); 

     //add more items...... 
} 

//getters and setters 

} 

ClubItem:

public class ClubItem implements Serializable { 

    private String id; 
    private String mainCategory; 
    private String subCategory; 
    private String merchant; 
    private String offer; 

//getters and setters 

} 

错误:

java.lang.IllegalStateException: Cannot create a session after the response has been committed 
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2705) 
    at org.apache.catalina.connector.Request.getSession(Request.java:2231) 
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:899) 
    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:419) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) 
    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:594) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:619) 
+0

随着实际的代码,很难得到真正的问题。 – 2013-03-07 05:53:22

+0

好吧,我尽量减少代码..的 – sampathpremarathna 2013-03-07 05:58:19

+0

可能重复[IllegalStateException异常:无法创建响应以来,一直致力于后会话(http://stackoverflow.com/questions/8072311/illegalstateexception-cannot-create-a-session-after-答复已经被提交) – BalusC 2013-03-13 16:42:11

回答

0

这似乎primefaces需要会话必须创建,如果我们要添加两个以上的行到table.If我之前或在构造函数中激活会话然后它通常工作。我不是没有理由但它发生。

添加

//bean constructor 
public CLMItems(){ 
FacesContext.getCurrentInstance().getExternalContext().getSession(true); 
// other stuff 
} 

解决问题。

+0

您是否尝试过使用来自CODI的@ViewAccessScoped? – phoenix7360 2013-03-07 09:08:40

+0

你是什么意思CODI,对不起,我不知道.... – sampathpremarathna 2013-03-07 09:36:19

+0

有CDI的两种主流实现方式:接缝(http://seamframework.org/Weld)和CODI(HTTPS://cwiki.apache。组织/ EXTCDI /)。我个人比较喜欢CODI,因为它提供了很好的功能,比如会话范围和'@ ViewAccessScoped'注释。 @ ViewAccessScoped注解类似于@ ViewScoped注解。然而,只要它是从jsf页面引用它就会生活。这意味着如果刷新页面并且它可以通过页面传递,它不会被销毁。我发现使用'@ ViewAccessScoped'而不是'@ ViewScoped'可以解决很多问题 – phoenix7360 2013-03-07 10:18:41