Preciso de um Converter?

5 respostas
aix

Ola Pessoal, como ainda sou noob no JSF to precisando de uma mão:

tenho o seguinte:

<h:selectOneMenu id="yes" required="true" value="#{pessoaController.ir}">
                        <f:selectItem value="#{pessoaController.calculaIR2}" itemValue="true" itemLabel="Sim"></f:selectItem>
                        <f:selectItem value="#{pessoaController.calculaIR3}" itemValue="false" itemLabel="Não"></f:selectItem>
                    </h:selectOneMenu>

Controller

private Map<String,String> ir = new HashMap<String, String>();
    private String calculaIR2;
    private String calculaIR3;

a escolha é apenas sim ou não, mas la no banco quero gravar um boolean sim true, não false, como faço no meu controller ? pois de todas formas que tentei da esse erro:

Erro de conversão ao definir o valor ‘true’ para ‘null Converter’.

5 Respostas

Vini_Fernandes

Cara, um artificio q voce poderia usar eh alterar a implementacao do metodo “set” do seu controller, assim:

public class PessoaContreller{
   public void setCalculaIR2(String calcula){
      if("sim".equalsIgnoreCase(calcula)){
         calculaIR2 = true;
      }
      else{
         calculaIR2 = false;
      }
   }
}

Com esses valores ajustados voce pode popupular seus beans e commitar para o banco.
T+

ViniGodoy

Mesmo código simplificado:

public class PessoaContreller{ public void setCalculaIR2(String calcula){ calculaIR2 = "sim".equalsIgnoreCase(calcula); } }

Evite ifs redundantes.

aix

ViniGodoy:
Mesmo código simplificado:

public class PessoaContreller{ public void setCalculaIR2(String calcula){ calculaIR2 = "sim".equalsIgnoreCase(calcula); } }

Evite ifs redundantes.

Obrigado Vini e ao Vini Fernandes, vlw pela ajuda, consegui resolver na verdade um pouco diferente do que eu imagina e do que vocês me passaram, vou postar aqui a solução que achei casa venha servir para alguem, mas agradeço a força.

XHTML

&lt;h:selectOneMenu id="yes" required="true" value="#{pessoaController.opcionActual}"&gt;
                        &lt;f:selectItems value="#{pessoaController.opciones}"&gt;&lt;/f:selectItems&gt;
                    &lt;/h:selectOneMenu&gt;

Controller

private SelectItem [] opciones = new SelectItem[] {
        new SelectItem("true", "Sim"),
        new SelectItem("false", "Não"),
    };

    private String opcionActual;

   public String getOpcionActual() {
        return opcionActual;
    }

    public void setOpcionActual(String opcionActual) {
        this.opcionActual = opcionActual;
    }

    public SelectItem[] getOpciones() {
        return opciones;
    }

    public void setOpciones(SelectItem[] opciones) {
        this.opciones = opciones;
    }


    public Boolean calculaIR() {
        if(opcionActual.equalsIgnoreCase("true")) {
            return true;
        } else
        return false;
    }

//populando o Bean com o retorno do que vem do xhtml
fornecedor.setCalcularIR(calculaIR());
ralphsilver

Como é apenas uma condição booleana, porque vc não usa o h:selectBooleanCheckbox ?

ViniGodoy

Outro método com if redundante:

public Boolean calculaIR() { return opcionActual.equalsIgnoreCase("true"); }

Você está usando alguma API? Pq seu campo boolean é um String? Por que você está retornando o tipo Boolean ao invés do boolean?

Criado 12 de julho de 2010
Ultima resposta 13 de jul. de 2010
Respostas 5
Participantes 4