JSF + ajax [RESOLVIDO]

10 respostas
G

Pessoal:

Seria possível fazer algo como isso:

<h:selectOneRadio id="radio1" value="A" layout="pageDirection" >
    <f:selectItem itemLabel="A" id="a" itemValue="A" />
    <f:selectItem itemLabel="B" id="b" itemValue="B" />
    <f:ajax event="click" execute="@form" render="rotuloCodigo"/>
</h:selectOneRadio>
<h:outputText value="Aqui está o rótulo" id="rotuloCodigo"/>
<br />

Como eu faria para que, cada vez que fosse clicado em um item do meu radio, o valor aparecesse no lugar de “Aqui está o rótulo”?

10 Respostas

andii.brunetta
&lt;h:selectOneRadio id="radio1" value="#{meuBean.meuAtributo}" layout="pageDirection" &gt;
   &lt;f:selectItem itemLabel="A" id="a" itemValue="A" /&gt;
   &lt;f:selectItem itemLabel="B" id="b" itemValue="B" /&gt;
   &lt;f:ajax execute="@this" render="rotuloCodigo"/&gt;
&lt;/h:selectOneRadio&gt;
&lt;h:outputText value="#{meuBean.meuAtributo}" id="rotuloCodigo"/&gt;

Não testei isso… mas acredito que assim funcione,
vc precisa de um atributo em um bean relacionado ao seu selecOneRadio e ao outputText

G

andii.brunetta:
&lt;h:selectOneRadio id="radio1" value="#{meuBean.meuAtributo}" layout="pageDirection" &gt; &lt;f:selectItem itemLabel="A" id="a" itemValue="A" /&gt; &lt;f:selectItem itemLabel="B" id="b" itemValue="B" /&gt; &lt;f:ajax execute="@this" render="rotuloCodigo"/&gt; &lt;/h:selectOneRadio&gt; &lt;h:outputText value="#{meuBean.meuAtributo}" id="rotuloCodigo"/&gt;

Não testei isso… mas acredito que assim funcione,
vc precisa de um atributo em um bean relacionado ao seu selecOneRadio e ao outputText

E qual seria a lógico do meuAtributo? Coloquei na minha classe:

public String getMeuAtributo() {
        return "teste";
    }

Isso não retornaria a string “teste”? Não consegui resolver isso…

o que eu preciso é bem isso:

&lt;h:selectOneRadio id="radio1" value="#{radioSelecao.meuAtributo}" layout="pageDirection" &gt;

    &lt;f:selectItem itemLabel="Código Empresa" id="a" itemValue="A" /&gt;
    &lt;f:selectItem itemLabel="CNPJ Empresa" id="b" itemValue="B" /&gt;
    &lt;f:selectItem itemLabel="CPF" id="c" itemValue="C" /&gt;
    &lt;f:selectItem itemLabel="Código Escritório" id="d" itemValue="D" /&gt;
    &lt;f:selectItem itemLabel="CNPJ Escritório" id="e" itemValue="E" /&gt;

    &lt;f:ajax execute="@this" render="rotuloCodigo"/&gt;

&lt;/h:selectOneRadio&gt;

&lt;label id="rotuloCodigo" &gt;Digite aqui o [&lt;h:outputText value="Rotulo: #{radioSelecao.meuAtributo}"/&gt; ]:&lt;/label&gt;

na área “Digite aqui o …” deveria apagar segundo a seleção do radiobutton acima…

andii.brunetta

o “meuAtributo” pode ser uma String no seu RadioSelecao.java

private String meuAtributo = "Digite aqui.";
//get e set

e:

&lt;h:outputText value="Rotulo: #{radioSelecao.meuAtributo}" id="rotuloCodigo" /&gt;&lt;/label&gt;

Algo assim?
e porque itemValue não pode ser o mesmo itemLabel? isso vai facilitar pra caramba!
exemplo:

&lt;f:selectItem itemLabel="Código Empresa" itemValue="Código Empresa" /&gt;
G

andii.brunetta:
o “meuAtributo” pode ser uma String no seu RadioSelecao.java

private String meuAtributo = "Digite aqui.";
//get e set

e:

&lt;h:outputText value="Rotulo: #{radioSelecao.meuAtributo}" id="rotuloCodigo" /&gt;&lt;/label&gt;

Algo assim?
e porque itemValue não pode ser o mesmo itemLabel? isso vai facilitar pra caramba!
exemplo:

&lt;f:selectItem itemLabel="Código Empresa" itemValue="Código Empresa" /&gt;

Bom, eu estou fazendo algo errado, mas não consigo explicar o que é :slight_smile:

Veja minha classe:

@ManagedBean
public class RadioSelecao implements Serializable {

    private String codigoEmpresa= "Código Empresa";
    private String cnpjEmpresa="CNPJ Empresa";
    private String cpf="CPF";
    private String codigoEscritorio="Código Escritório";
    private String cnpjEscritorio="CNPJ Escritório";

    public RadioSelecao() {
    }

    public String getCodigoEmpresa() {
        return codigoEmpresa;
    }

    public void setCodigoEmpresa(String codigoEmpresa) {
        this.codigoEmpresa = codigoEmpresa;
    }

e minha página:

&lt;h:selectOneRadio id="radio1" value="#{radioSelecao.codigoEmpresa}" layout="pageDirection" &gt;
    &lt;f:selectItem itemLabel="Código Empresa" id="a" itemValue="Código Empresa" /&gt;
    &lt;f:selectItem itemLabel="CNPJ Empresa" id="b" itemValue="CNPJ Empresa" /&gt;
    &lt;f:selectItem itemLabel="CPF" id="c" itemValue="CPF" /&gt;
    &lt;f:selectItem itemLabel="Código Escritório" id="d" itemValue="Código Escritório" /&gt;
    &lt;f:selectItem itemLabel="CNPJ Escritório" id="e" itemValue="CNPJ Escritório" /&gt;

    &lt;f:ajax execute="@this" render="rotuloCodigo"/&gt;

&lt;/h:selectOneRadio&gt;

&lt;h:outputText value="Rotulo: #{radioSelecao.codigoEmpresa}" id="rotuloCodigo"/&gt;

Devo estar fazendo algo errado, porque onde tenho o
<h:outputText value=“Rotulo: #{radioSelecao.codigoEmpresa}” id=“rotuloCodigo”/>
eu esperaria que aparecesse:
Rotulo: Código Empresa

e nem isso aparece… inclusive o HTML gerado final ficou:

<span id=“formDados:rotuloCodigo”>Rotulo: </span>

andii.brunetta

Seu bean está errado!
Vou passar a chamar o “meuAtributo” de opcaoSelecionada

@Named
@SessionScoped
public class RadioSelecao implements Serializable {

    private String opcaoSelecionada = "Digite aqui";

    public RadioSelecao() {
          opcaoSelecionada = "Digite aqui"; // só pra garantir que ele vai inicializar
    }

    public String getOpcaoSelecionada() {
        return opcaoSelecionada;
    }

    public void setOpcaoSelecionada(String opcaoSelecionada) {
        this.opcaoSelecionada = opcaoSelecionada;
    }
}

e no seu selectOneMenu:

&lt;h:selectOneRadio id="radio1" value="#{radioSelecao.opcaoSelecionada}" layout="pageDirection" &gt;

e o seu rotulo:

&lt;h:outputText value="Rotulo: #{radioSelecao.opcaoSelecionada}" id="rotuloCodigo"/&gt;
G

andii.brunetta:
Seu bean está errado!
Vou passar a chamar o “meuAtributo” de opcaoSelecionada

Mudei exatamente igual ao seu sugerido, e o html gerado continua em branco:

<span id=“formDados:rotuloCodigo”>Rótulo: </span>

andii.brunetta

copie exatamente o bean que eu te passei
com o @SessionScoped também

G

andii.brunetta:
copie exatamente o bean que eu te passei
com o @SessionScoped também

copiei exatamente igual, inclusive com o @SessionScoped, que já era padrão no meu antigo…

andii.brunetta

de noite eu testo e posto alguma coisa, pra ver se ajuda

G

Resolvido, mas com a definição no faces-config.xml - eu estava usando apenas a definição através da anotação @ManagedBean

Criado 6 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 10
Participantes 2