GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

SelectOneRadio- valueChangeListener não funciona com Primefaces 3.3.1

:?:
Olá galera, estou tendo um enorme problema. O que quero fazer é o seguinte, quando escolher a opção masculino no selectOneRadio ele mostra um inputtext e quando escolho feminino ele esconde. O código funciona perfeitamente, mas…

Veja o código abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Teste</title>
    </h:head>
    <body>
        <f:view>
            <h:form>
                <h:messages/>
                <h:outputLabel value="Sexo:"/>                      
                <h:selectOneRadio id="sex" binding="#{pessoasFisicasManagedBean.checkEstado}" valueChangeListener="#{pessoasFisicasManagedBean.sexChanged}" onchange="submit()" immediate="true">
                        <f:selectItem itemLabel="Masculino" itemValue="M" />
                        <f:selectItem itemLabel="Feminino" itemValue="F" />                  
                    </h:selectOneRadio>
                <h:outputLabel value="Teste:"/>                      
                <h:inputText id="mostra" binding="#{pessoasFisicasManagedBean.checkInputTextEstado}" size="40"/>
            </h:form>
        </f:view>

    </body>
</html>

Veja meu bean parcial:

    private HtmlSelectOneMenu checkEstado = new HtmlSelectOneMenu();    
    private HtmlInputText checkInputTextEstado = new HtmlInputText();
      
        
    public PessoasFisicasManagedBean() {      //Meu construtor  
        checkEstado.setId("sex");
        checkInputTextEstado.setId("mostra");
        checkInputTextEstado.setRendered(false);
    }   
    
    
        
    
    public void sexChanged(ValueChangeEvent event){
       if(event.getNewValue().toString().equals("M")){
            checkInputTextEstado.setRendered(true);            
        }else{
            checkInputTextEstado.setRendered(false);
        }
        FacesContext.getCurrentInstance().renderResponse();
    }       
          
    public HtmlInputText getCheckInputTextEstado() {
        return checkInputTextEstado;
    }

    public void setCheckInputTextEstado(HtmlInputText checkInputTextEstado) {
        this.checkInputTextEstado = checkInputTextEstado;
    }

    public HtmlSelectOneMenu getCheckEstado() {
        return checkEstado;
    }

    public void setCheckEstado(HtmlSelectOneMenu checkEstado) {
        this.checkEstado = checkEstado;
    }

quando uso Primefaces 3.3.1 ele não funciona mais nada. Alguém já passou pelo problema? Alguém sabe como resolver?

Eu nunca passei por isso, mas tenho conselhos a te passar, primeiro, troque o seu <body></body> para <h:body></h:body> (importantíssimo).
Se alterando isso, ainda não funcionar o componente, utilize, do próprio primefaces, o componente ajax dele, que assim tudo fica mais tranquilo.

&lt;p:ajax event="change" update="localDoInputText" listener="#{pessoasFisicasManagedBean.oMetodoQueVaiCuidarDisso}"/&gt;

implementando direitinho o jsf e atentando para as tags, que são muito importantes, você extrai o maximo de proveito dos componentes, nunca esqueça de implementar dentro de <h:head> e <h:body>

Assim do jeito que fiz as opções (Masculino e feminino) nem aparecem, o que está faltando?


<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Teste</title>
    </h:head>
    <h:body>
        <h:form prependId="false" id="form">
            <p:panel id="panel" header="New Person" style="margin-bottom:10px;">
                <p:messages id="messages" />
                <h:panelGrid id="gridid">
                    <h:outputLabel value="Sexo:"/>                      
                    <p:selectOneMenu style="width: 220px;" immediate="true" onchange="submit">
                        <f:selectItems itemLabel="Masculino" itemValue="M"/>
                        <f:selectItems itemLabel="Feminino" itemValue="F"/>
                        <p:ajax event="change" update=":form:mostra" listener="#{pessoasFisicasManagedBean.alterarValor()}"/>
                    </p:selectOneMenu>                     
                    <h:outputLabel value="Teste:"/>                      
                    <p:inputText id="mostra" rendered="#{pessoasFisicasManagedBean.mostraesconde}" size="40"/>
                </h:panelGrid>
            </p:panel>            
        </h:form>
    </h:body>
    <!--< -->

</html>

Ele nem executa o código código abaixo:

 public void sexChangedd(){
        System.out.println("hereup");
        FacesContext.getCurrentInstance().renderResponse();
    }

Aqui está meu bean:

 private HtmlSelectOneMenu checkEstado = new HtmlSelectOneMenu();    
    private HtmlInputText checkInputTextEstado = new HtmlInputText();
    private boolean mostraesconde;       
        
    public PessoasFisicasManagedBean() {        
        checkEstado.setId("sex");
        checkInputTextEstado.setId("mostra");
        checkInputTextEstado.setRendered(false);
    }

    public boolean isMostraesconde() {
        return mostraesconde;
    }

    public void setMostraesconde(boolean mostraesconde) {
        this.mostraesconde = mostraesconde;
    }
        
    public void sexChangedd(){
        System.out.println("hereup");     
        FacesContext.getCurrentInstance().renderResponse();
    }
    
   public void alterarValor(){
      System.out.println("hereup"); 
   }
    
//