jsf nao atualiza a propriedade no bean
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.
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
Curtidas 0
Respostas
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.
Altere para testar, mas se não funcionar mostre a função calculaDias do atributo onchange para analisar melhor.
GOSTEI 0
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);
}
}
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
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
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
05/04/2012
Legal ter postado o resultado e como resolveu.
Até mais.
Até mais.
GOSTEI 0
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
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
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
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;
}
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
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
att Davi
GOSTEI 0
Dyego Carmo
05/04/2012
Deu certo ?
Valeu !
Valeu !
GOSTEI 0
Jose Boas
05/04/2012
Finalizei. Obrigado a todos.
GOSTEI 0