Fórum jsf nao atualiza a propriedade no bean #415031

05/04/2012

0

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

Responder

Posts

05/04/2012

Willes Reis

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.
Responder

Gostei + 0

05/04/2012

Jose Boas

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

Gostei + 0

05/04/2012

Jose Boas

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
Responder

Gostei + 0

05/04/2012

Willes Reis

Legal ter postado o resultado e como resolveu.

Até mais.
Responder

Gostei + 0

07/04/2012

Davi Costa

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
Responder

Gostei + 0

08/04/2012

Jose Boas

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.
Responder

Gostei + 0

09/04/2012

Jose Boas

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

Gostei + 0

10/04/2012

Davi Costa

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
Responder

Gostei + 0

14/04/2012

Dyego Carmo

Deu certo ?

Valeu !
Responder

Gostei + 0

14/04/2012

Jose Boas

Finalizei. Obrigado a todos.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar