jsf nao atualiza a propriedade no bean

Java

05/04/2012

Estou com um problema eu tenho 2 ropriedades de uma classe que não consigo pegar no meu managedBean. POr exemplo ao clicar selecionar uma opção no selectone menu, eu chamo um metodo que vai jogar alguns valores em alguns campos, até aí tudo bem mas ao acionar este selectone menu eu precisa calcular ai dia entre bas datas, mas eu não consigo pegar as datas pois chegam nulas no método.

select one menu
<p:selectOneMenu id=tipoAcidente value=#{planilhaBean.acidenteSelecionado.tipoAcidente} style=width:180px onchange=calculaDias(gE(edicao:dataAcidente).value,gE(edicao:dataRetorno).value,edicao:diasPerdidos);>
<f:selectItem itemLabel=Selecione o Tipo itemValue=/>
<f:selectItem itemLabel=FAC itemValue=FAC/>
<f:selectItem itemLabel=LWC itemValue=LWC/>
<f:selectItem itemLabel=RWC itemValue=RWC/>
<f:selectItem itemLabel=TRAJETO itemValue=TRAJETO/>
<p:ajax update=diasPerdidos diasTrabalhoRestrito listener=#{planilhaBean.tipoAcidente} />

-----

Método no ManegedBEan
public void tipoAcidente() {
System.out.println(Data do acidente = + this.dataAcidente);
System.out.println(Data do retorno = + this.dataRetorno);
if (this.acidenteSelecionado.getTipoAcidente().equals(FAC) ||
this.acidenteSelecionado.getTipoAcidente().equals(TRAJETO)){
this.acidenteSelecionado.setDiasPerdidos(NA);
this.acidenteSelecionado.setDiasTrabalhoRestrito(NA);
}else
if (this.acidenteSelecionado.getTipoAcidente().equals(LWC)){
this.acidenteSelecionado.setDiasTrabalhoRestrito(NA);
}else{
this.acidenteSelecionado.setDiasPerdidos(N);
}
}
Eu mandei exibir as datas e eles estão nulas. O meu bean está como viewscoped, como tem que estar.
Jose Boas

Jose Boas

Curtidas 0

Respostas

Willes Reis

Willes Reis

05/04/2012

Eu notei que na função calculaDias() o terceiro parâmetro não está usando a chamada gE(<atributo>).value.
Altere para testar, mas se não funcionar mostre a função calculaDias do atributo onchange para analisar melhor.
GOSTEI 0
Jose Boas

Jose Boas

05/04/2012

Estou fazendo no jsf mesmo, pois tenho uma função no manegbean que preciso executar, mas como eu disse não consigo pegar o valor da dataacidente e dataretorno ao cyamar o metodo mesmo preenchidas retorna null.

Vou mostrar novamente o xhtml sem o javascript.
<p:selectOneMenu id=tipoAcidente value=#{planilhaBean.acidenteSelecionado.tipoAcidente} style=width:180px>
<f:selectItem itemLabel=Selecione o Tipo itemValue=/>
<f:selectItem itemLabel=FAC itemValue=FAC/>
<f:selectItem itemLabel=LWC itemValue=LWC/>
<f:selectItem itemLabel=RWC itemValue=RWC/>
<f:selectItem itemLabel=TRAJETO itemValue=TRAJETO/>
<p:ajax update=diasTrabalhoRestrito diasPerdidos event=change listener=#{planilhaBean.tipoAcidente} />
</p:selectOneMenu>
// metodo no bean
public void tipoAcidente() {
System.out.println(Data do acidente = + this.acidenteSelecionado.getDataAcidente());
System.out.println(Data do retorno = + this.acidenteSelecionado.getDataRetorno());
if (this.acidenteSelecionado.getTipoAcidente().equals(FAC) ||
this.acidenteSelecionado.getTipoAcidente().equals(TRAJETO)){
this.acidenteSelecionado.setDiasPerdidos(NA);
this.acidenteSelecionado.setDiasTrabalhoRestrito(NA);
}else
if (this.acidenteSelecionado.getTipoAcidente().equals(LWC)){
this.acidenteSelecionado.setDiasTrabalhoRestrito(NA);
}else{
this.acidenteSelecionado.setDiasPerdidos(NA);
}
}
GOSTEI 0
Jose Boas

Jose Boas

05/04/2012

cosegui resolver mandando processar o form, pois como uso o escopo de view eu não perco os dados, e funcionou blz.
Veja como ficou
<p:selectOneMenu id=tipoAcidente value=#{planilhaBean.acidenteSelecionado.tipoAcidente} style=width:180px>
<f:selectItem itemLabel=Selecione o Tipo itemValue=/>
<f:selectItem itemLabel=FAC itemValue=FAC/>
<f:selectItem itemLabel=LWC itemValue=LWC/>
<f:selectItem itemLabel=RWC itemValue=RWC/>
<f:selectItem itemLabel=TRAJETO itemValue=TRAJETO/>
<p:ajax update=:diasTrabalhoRestrito :diasPerdidos event=change process=@form listener=#{planilhaBean.tipoAcidente} />
</p:selectOneMenu>
o que eu acicionei foi process=@form
GOSTEI 0
Willes Reis

Willes Reis

05/04/2012

Legal ter postado o resultado e como resolveu.

Até mais.
GOSTEI 0
Davi Costa

Davi Costa

05/04/2012

Cara o idela é usar as próprias propiedades do jsf para fazer isso, pesquise por valueChangeListener é o correto com JSF:

http://www.mkyong.com/jsf2/jsf-2-valuechangelistener-example/
http://www.guj.com.br/java/250300-resolvidocomo-pegar-objeto-do-componente-selectonemenu-do-primefaces-3

att Davi
GOSTEI 0
Jose Boas

Jose Boas

05/04/2012

Consegui resolver esta parada colocando os métodos que popula os SelectOneMenu todos juntos no mesmo bean juntamente com a propriedade selecionada, mas aconteceu outro problema quando eu clico em alterar é executado também o método que selecione as empresas de acordo com o polo, e portando não é posicionada na que está gravada como os demais combos mas lista as empresas de acordo com o polo. Eu darei uma olhada nos links que você me mandou para ver se posso achar algo.
GOSTEI 0
Jose Boas

Jose Boas

05/04/2012

Eu consigo mudar o problema e quando eu clico em alterar ele acaba acionando o evento do combo e listando todos a empresa que estão relacionadas ao combo mas eu não queo eu preciso que posicione na empresa que esta inserida, ou seja oa cambos aninhados estão sendo executado ao clicar em alterar e portando o segundo combo que dependo do primeiro não posiciona o segundo e eu tentei fazer da seguinte forma mas nõ deu certo.

public List<SelectItem> getPoloEmpresaSelect() {
if (this.codigoPolo > 0){

if(this.acidenteSelecionado.getPolo().getCodigoPolo() != null){
this.poloEmpresaSelect = new ArrayList<SelectItem>();
List<Empresa> empresa = (List<Empresa>) this.acidenteSelecionado.getPolo().getEmpresaList();
SelectItem item = null;
for (Empresa emp : empresa ){
item = new SelectItem(emp,emp.getNomeFantasia());
item.setEscape(false);
this.poloEmpresaSelect.add(item);
}
// aqui eu tento posicionar o segundo combo de acordo com que foi inserido na tabela, mas ão deu.
if(this.codigoEmpresa != 0){
for(SelectItem itens : this.poloEmpresaSelect){
System.out.println(valor da empresa = + itens.getValue().toString());

if (itens.getValue().equals(this.acidenteSelecionado.getEmpresa().getCodigoEmpresa().toString())){
break;
}
}
}

}
}
this.codigoPolo++;
return this.poloEmpresaSelect;
}
GOSTEI 0
Davi Costa

Davi Costa

05/04/2012

na verdade vc tem q alterar o get do segundo combo, para ele saber quando vir da alteração en dá inclusão

att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

05/04/2012

Deu certo ?

Valeu !
GOSTEI 0
Jose Boas

Jose Boas

05/04/2012

Finalizei. Obrigado a todos.
GOSTEI 0
POSTAR