[RESOLVIDO]f:selectItem já marcado

8 respostas
M

Pessoal,

tenho dois f:selectItem um com valor SIM e outro com valor NÃO, segue o código

<p:selectOneRadio >  
                            <f:selectItem itemLabel="SIM" itemValue="SIM" />  
                            <f:selectItem itemLabel="NÃO" itemValue="NAO" />                               
                        </p:selectOneRadio>

quero que ao executar o projeto, o f:selectItem SIM já venha selecionado…

como faço isso?

8 Respostas

G

No construtor do seu ManagedBean você pode inicializar o atributo que será utilizado no seu selectOneRadio com o valor=“SIM”.

<p:selectOneRadio value="#{seuBean.seuAtributo}" >    
          <f:selectItem itemLabel="SIM" itemValue="SIM" />    
          <f:selectItem itemLabel="NÃO" itemValue="NAO" />                                 
    </p:selectOneRadio>
@ManagedBean
   public class SeuBean {
        private String seuAtributo;

        // gets and sets

        public SeuBean(){
             seuAtributo = "SIM";
        }
   }
M

ta. eu acrescento esse código no meu ManagedBean e no código <p:selectOneRadio value="#{seuBean.seuAtributo}" > <f:selectItem itemLabel="SIM" itemValue="SIM" /> <f:selectItem itemLabel="NÃO" itemValue="NAO" /> </p:selectOneRadio> não acrescento nada?

G

O código que eu postei foi só um exemplo, no lugar de seuAtributo, você pode substituir pelo atributo que você precisar.

M

cara ainda não consegui… tenho uma classe pacienteController

package br.com.clinica.controller;

import br.com.clinica.dao.PacienteDao;
import br.com.clinica.dao.InterfacePaciente;
import br.com.clinica.model.Paciente;
import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.primefaces.context.RequestContext;


@ManagedBean
@SessionScoped
public class PacienteController {

    private Paciente paciente;
    private DataModel listaPaciente; 

aqui é o código que você me passou e eu alterei os nomes    
[quote]
private String carteirinha_emitida;    
    
    public PacienteController(){  
          carteirinha_emitida = "SIM";  
     } 
[quote]

    public Paciente getPaciente() {
        if (this.paciente == null) {
            this.paciente = new Paciente();
        }
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public DataModel getListaPaciente() {
        List<Paciente> lista = new PacienteDao().list();
        listaPaciente = new ListDataModel(lista);
        return listaPaciente;
    }

    public void prepararAdicionarPaciente(ActionEvent actionEvent) {
        paciente = new Paciente();
    }

    public void prepararAlterarPaciente(ActionEvent actionEvent) {
        paciente = (Paciente) (listaPaciente.getRowData());
    }

    public void adicionar(ActionEvent actionEvent) throws ParseException {        
        InterfacePaciente dao = new PacienteDao();
        dao.salvar(paciente);        

    }    

    public String excluir() {
        Paciente paciente = (Paciente) (listaPaciente.getRowData());
        InterfacePaciente dao = new PacienteDao();
        dao.remover(paciente);
        return "paciente";
    }

    public void clear(AjaxBehaviorEvent event) {
        this.paciente = null;
    }

    public void reset() {
        RequestContext.getCurrentInstance().reset("form:dialog");
    }

    public void atualizarPaciente() {
        InterfacePaciente dao = new PacienteDao();
        dao.atualizar(paciente);        
        RequestContext.getCurrentInstance().closeDialog(paciente);
    }    

    public String carregarPaciente(Paciente c) {
        paciente = c;        
        return "pacienteAlterar";
    }
    
    public void choosePaciente() {
        this.prepararAlterarPaciente(null);
        RequestContext.getCurrentInstance().openDialog("pacienteAlterar");
    }
}

e aqui é o meu código xhtml do p:selectOneRadio

<p:selectOneRadio id="carteirinha_emitida" 
                                          value="#{pacienteController.paciente.carteirinha_emitida}">  
                            <f:selectItem itemLabel="SIM" itemValue="SIM" />  
                            <f:selectItem itemLabel="NÃO" itemValue="NAO" />                               
                        </p:selectOneRadio>

está certo o código do meu pacienteController que é o que você me passou e eu somente alterei os nome do atributo??

e o meu código xhtml ta certo tbm??

pode me ajudar se não for pedir demais?? :confused:

G

Tenta fazer o seguinte, vou colocar algumas sugestões para você.

Coloquei no teu código algumas modificações, veja se vai dar certo.

Outra coisa, evite usar @SessionScoped, tente usar @ViewScoped, a não ser que seja realmente necessário manter os dados na sessão.

Espero ter ajudado.

Abraço

[quote=marcos.stuchi]cara ainda não consegui… tenho uma classe pacienteController

package br.com.clinica.controller;

import br.com.clinica.dao.PacienteDao;
import br.com.clinica.dao.InterfacePaciente;
import br.com.clinica.model.Paciente;
import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.primefaces.context.RequestContext;


@ManagedBean
@SessionScoped
public class PacienteController {

    private Paciente paciente;
    private DataModel listaPaciente; 

aqui é o código que você me passou e eu alterei os nomes    
[quote]
    
    public PacienteController(){  
            this.paciente = new Paciente();
            this.paciente.carteirinha_emitida = true;
     } 
<blockquote>

    public Paciente getPaciente() {
        if (this.paciente == null) {
            this.paciente = new Paciente();
        }
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public DataModel getListaPaciente() {
        List<Paciente> lista = new PacienteDao().list();
        listaPaciente = new ListDataModel(lista);
        return listaPaciente;
    }

    public void prepararAdicionarPaciente(ActionEvent actionEvent) {
        paciente = new Paciente();
    }

    public void prepararAlterarPaciente(ActionEvent actionEvent) {
        paciente = (Paciente) (listaPaciente.getRowData());
    }

    public void adicionar(ActionEvent actionEvent) throws ParseException {        
        InterfacePaciente dao = new PacienteDao();
        dao.salvar(paciente);        

    }    

    public String excluir() {
        Paciente paciente = (Paciente) (listaPaciente.getRowData());
        InterfacePaciente dao = new PacienteDao();
        dao.remover(paciente);
        return "paciente";
    }

    public void clear(AjaxBehaviorEvent event) {
        this.paciente = null;
    }

    public void reset() {
        RequestContext.getCurrentInstance().reset("form:dialog");
    }

    public void atualizarPaciente() {
        InterfacePaciente dao = new PacienteDao();
        dao.atualizar(paciente);        
        RequestContext.getCurrentInstance().closeDialog(paciente);
    }    

    public String carregarPaciente(Paciente c) {
        paciente = c;        
        return "pacienteAlterar";
    }
    
    public void choosePaciente() {
        this.prepararAlterarPaciente(null);
        RequestContext.getCurrentInstance().openDialog("pacienteAlterar");
    }
}

e aqui é o meu código xhtml do p:selectOneRadio

<p:selectOneRadio id="carteirinha_emitida" 
                                          value="#{pacienteController.paciente.carteirinha_emitida}">  
                            <f:selectItem itemLabel="SIM" itemValue="true" />  
                            <f:selectItem itemLabel="NÃO" itemValue="false" />                               
                        </p:selectOneRadio>

está certo o código do meu pacienteController que é o que você me passou e eu somente alterei os nome do atributo??

e o meu código xhtml ta certo tbm??

pode me ajudar se não for pedir demais?? :/

M

me perdoe a insistência, mas ainda não deu certo :( :( :(

nesse código:
private Paciente paciente;  
    private DataModel listaPaciente;  
      
    public PacienteController(){    
            this.paciente = new Paciente();  
            this.paciente.carteirinha_emitida = true;  
     }
aparece o seguinte erro: para essa linha:
this.paciente.carteirinha_emitida = true;
"Tornar carteirinha_emitida público"

esse carteirinha_emita, vem da minha classe Paciente que é esse código:

#minha classe Paciente
private String carteirinha_emitida;

public String getCarteirinha_emitida() {
        return carteirinha_emitida;
    }

    public void setCarteirinha_emitida(String carteirinha_emitida) {
        this.carteirinha_emitida = carteirinha_emitida;
    }
que vai me retornar uma String SIM OU NAO pra eu inserir no banco de dados conforme o que o usuário deixar assinalado no p:selectOneRadio, se eu colocar carteirinha_emitida como público assim como o primeiro erro que comentei, dai aparece o seguinte erro na minha classe Paciente para o código
public String carteirinha_emitida;
a variável da instância para um atributo persistente não deve ser pública.

acho que isso não tão difícil de resolver, mas não está dando certo :(

I

Na sua primeira tentativa, vc criou uma vriavel no seu bean carteirinha_emitida , mas no seu xhtml vc estava pegando da sua entidade paciente pacienteController.paciente.carteirinha_emitida.
Nunca que ia pegar mesmo, pois estão vindo de lugares diferente… se vc fizesse pacienteController.carteirinha_emitida, teria funcionado em partes.

Depois na sua segunda “tentativa”, vc tentou fazer isso: this.paciente.carteirinha_emitida = true; que o guilherme_costa havia passado… mas isso é encapsulamento básico, td bem, nao passe seu atributo para public, mas é só fazer o set dele!
this.paciente.setCarteirinha_emitida(“SIM”);

M

muitooooo obrigado igor_ks,
coloquei o código this.paciente.setCarteirinha_emitida(“SIM”); e deu certo, obrigado a você também guilherme_costa e me desculpem pela insistência.

Criado 28 de novembro de 2013
Ultima resposta 29 de nov. de 2013
Respostas 8
Participantes 3