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;
}   

}

Operadoraクラス:

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のバグが原因である可能性が最も高いです。このバグは、ビュー スコープまたはセッション スコープの Bean が、応答がコミットされてからかなり時間がたってから、比較的大きな JSF ページで初めて「遅く」参照されたときに発生する可能性があります。

ビューおよびセッション スコープの Bean は、HTTP セッションに格納する必要があります。そのためには、HTTP セッションがまだ作成されていない場合 (初回の要求など) は、最初に作成する必要があります。そのためには、最初に HTTP 応答ヘッダーに Cookie を配置する必要があります。そのため、応答はクライアントにまったく送信されるべきではありませんでした。デフォルトの応答バッファ サイズは通常 2KB であるため、ページが 2KB を超え、ビューまたはセッション スコープ Bean が2KB の最初の部分のに初めて参照されると、まさにこの例外が発生します。

少なくとも Mojarra 2.1.8 (現在は既に 2.1.13 です) にアップグレードすると、この問題は解消されます。

以下も参照してください。

于 2012-09-12T18:45:37.553 に答える
0

まず第一に、コードの構文の問題が 1 つあります。

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

value 属性をバッキング Bean にバインドしていません。さらに、 IllegalStateException は、応答を既にコミットしている場合に発生します。つまり、何かを書き、それをコミットしてから、別のサーブレットまたは何かに制御を渡します。適切な ManagedBean コードを見る前に、どこを間違えているのかを判断するのは困難です。あなたのリストはどのように入力されていますか。ManagedBean コードを投稿して、value 属性を ManagedBean プロパティにマップしてみてください。HTH、ベン

于 2012-09-12T18:27:27.993 に答える