0

我正在尝试加载 selectOneMenu 并给出以下异常:java.lang.IllegalStateException: Cannot create a session after the response has been committed. 我有 xhtml:

<h:outputText value="Nome:" />
 <p:selectOneMenu value="" id="nome"  >
   <f:selectItem itemValue="#{solicitarPortabilidadeBean.listaDoadora}" var="doadora" itemLabel="#{doadora.nomeOperadora}"/>                
 </p:selectOneMenu>

豆子:

@ViewScoped
@ManagedBean
public class SolicitarPortabilidadeBean implements Serializable {

  private static final long serialVersionUID = 1L;  
  private List<Operadora> listaDoadora = null;
  private Operadora operadora;
//getters and setters

  @EJB
  private ConsultasSpnService consultaOp;   

  public List<Operadora> getListaDoadora() {

if (listaDoadora == null) {

 listaDoadora = new ArrayList<Operadora>();
 listaDoadora = consultaOp.listarOp();          

}   

return listaDoadora;
    }

public void setListaDoadora(List<Operadora> listaDoadora) {
    this.listaDoadora = listaDoadora;
}

public Operadora getOperadora() {
    return operadora;
}

public void setOperadora(Operadora operadora) {
    this.operadora = operadora;
}

public List<Eot> getListaEot() {
    return listaEot;
}

public void setListaEot(List<Eot> listaEot) {
    this.listaEot = listaEot;
}

public Eot getEot() {
    return eot;
}

public void setEot(Eot eot) {
    this.eot = eot;
}

public ConsultasSpnService getConsultaOp() {
    return consultaOp;
}

public void setConsultaOp(ConsultasSpnService consultaOp) {
    this.consultaOp = consultaOp;
}   

}

歌剧班:

public class Operadora {
 private String srvprovid = null;   
 private String nomeOperadora = null;   
 private String indicadorFuncoes = null;
 private String funcaoSuporte = null;
 private String tipoTempReceptora = null;
 private String tipoTempDoadora = null;
 private String horaTrabSuportado = null;
 private Long qtdMaximaTn = null;
 private String tipoServico = null;
 //getters and setters
public String getSrvprovid() {
        return srvprovid;
    }
    public void setSrvprovid(String srvprovid) {
        this.srvprovid = srvprovid;
    }
    public String getNomeOperadora() {
        return nomeOperadora;
    }
    public void setNomeOperadora(String nomeOperadora) {
        this.nomeOperadora = nomeOperadora;
    }
    public String getIndicadorFuncoes() {
        return indicadorFuncoes;
    }
    public void setIndicadorFuncoes(String indicadorFuncoes) {
        this.indicadorFuncoes = indicadorFuncoes;
    }
    public String getFuncaoSuporte() {
        return funcaoSuporte;
    }
    public void setFuncaoSuporte(String funcaoSuporte) {
        this.funcaoSuporte = funcaoSuporte;
    }
    public String getTipoTempReceptora() {
        return tipoTempReceptora;
    }
    public void setTipoTempReceptora(String tipoTempReceptora) {
        this.tipoTempReceptora = tipoTempReceptora;
    }
    public String getTipoTempDoadora() {
        return tipoTempDoadora;
    }
    public void setTipoTempDoadora(String tipoTempDoadora) {
        this.tipoTempDoadora = tipoTempDoadora;
    }
    public String getHoraTrabSuportado() {
        return horaTrabSuportado;
    }
    public void setHoraTrabSuportado(String horaTrabSuportado) {
        this.horaTrabSuportado = horaTrabSuportado;
    }
    public Long getQtdMaximaTn() {
        return qtdMaximaTn;
    }
    public void setQtdMaximaTn(Long qtdMaximaTn) {
        this.qtdMaximaTn = qtdMaximaTn;
    }
    public String getTipoServico() {
        return tipoServico;
    }
    public void setTipoServico(String tipoServico) {
        this.tipoServico = tipoServico;
    }

我知道错误在于调用 xhtml 中的 bean,但我尝试了我所知道的一切。谁能帮我?

谢谢!!!

4

2 回答 2

2

除了代码中出现严重的逻辑错误,而在渲染过程中应该没有抛出任何异常,当然不是特别提到的异常,

IllegalStateException:提交响应后无法创建会话

您的具体问题很可能是由Mojarra 2.1.8 中修复的 Mojarra 中的错误引起的。当第一次在相对较大的 JSF 页面中“延迟”引用视图范围或会话范围的 bean 时,此错误可能会出现,此时响应已提交很长时间。

视图和会话范围的 bean 需要存储在 HTTP 会话中。为此,如果尚未创建 HTTP 会话(例如首次请求),则需要先创建。为此,首先需要在 HTTP 响应标头上放置一个 cookie。为此,根本不应该将响应发送给客户端。默认响应缓冲区大小通常为 2KB,因此如果页面大于 2KB,并且在第一块 2KB之后第一次引用视图或会话范围的 bean ,那么您将得到这个异常。

至少升级到 Mojarra 2.1.8(它目前已经在 2.1.13),这个问题应该会消失。

也可以看看:

于 2012-09-12T18:45:37.553 回答
0

首先,这是您的代码的一个语法问题

<h:outputText value="Nome:" />
 <p:selectOneMenu value="" id="nome"  >
   <f:selectItem itemValue="#{solicitarPortabilidadeBean.listaDoadora}" var="doadora" itemLabel="#{doadora.nomeOperadora}"/>                
 </p:selectOneMenu>

您没有将 value 属性绑定到支持 bean。此外,当您已经提交响应时,IllegalStateException 就会出现,这意味着写了一些东西,提交了它,然后将控制权传递给另一个 servlet 或其他东西。在查看正确的 ManagedBean 代码之前,很难判断您在哪里弄错了。您的列表是如何填充的。请发布 ManagedBean 代码并尝试将 value 属性映射到某个 ManagedBean 属性。HTH,本

于 2012-09-12T18:27:27.993 回答