[RESOLVIDO]f:selectItem já marcado

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?

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

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?

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

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:

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;
     } 
[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="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?? :/[/quote]

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

nesse código: [code]
private Paciente paciente;
private DataModel listaPaciente;

public PacienteController(){    
        this.paciente = new Paciente();  
        this.paciente.carteirinha_emitida = true;  
 } 

[/code] 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

[code]
private String carteirinha_emitida;

public String getCarteirinha_emitida() {
return carteirinha_emitida;
}

public void setCarteirinha_emitida(String carteirinha_emitida) {
    this.carteirinha_emitida = carteirinha_emitida;
}

[/code] 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 :frowning:

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”);

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.