JSF passar parametros

5 respostas
G
Olá pessoal! Estou com um problema (de iniciante) com relação a passagem de parametros de um Bean para outro... Tipo tenho o formulario abaixo:
<h:form id="formEmpresalog">                
                    <rich:panel>
                        <f:facet name="header">
                            Empresas
                        </f:facet>                    
                        <div class="divInput">                            
                            &lt;h:outputLabel value="Apelido:" for="empresa"/&gt;<br />
                            &lt;h:selectOneMenu id="empresa" value="#{EmplogMB.id}" styleClass="ComboBox"
                                             required="true" requiredMessage="Você deve especificar uma empresa!"&gt;
                                &lt;f:selectItems value="#{EmplogMB.listEmpresas}" /&gt;                            
                            &lt;/h:selectOneMenu&gt;                         
                        &lt;/div&gt;                    
                        &lt;div id="buttons"&gt;
                            &lt;a4j:commandButton value="Entrar" styleClass="formButton" action="#{EmplogMB.entrar}"
                                               onmouseover="this.className='formButtonOver'"
                                               onmouseout="this.className='formButton'" /&gt;
                            &lt;rich:spacer width="5" /&gt;
                            &lt;h:commandButton immediate="true" value="Nova" styleClass="formButton" action="#{EmplogMB.nova}"
                                             onmouseover="this.className='formButtonOver'"
                                             onmouseout="this.className='formButton'" /&gt;
                            &lt;rich:spacer width="5" /&gt;
                            &lt;h:commandButton value="Editar" styleClass="formButton" action="#{EmplogMB.editar}"
                                             onmouseover="this.className='formButtonOver'"
                                             onmouseout="this.className='formButton'" &gt;
                            &lt;/h:commandButton&gt;
                        &lt;/div&gt;
                    &lt;/rich:panel&gt;                
                &lt;/h:form&gt;
onde tem um combobox com as empresas cadastradas e 3 botoes Entrar, Nova, Editar... O problema esta quando quero editar uma empresa escolhida no combobox onde ao pressionar o botão editar ele não passa o ID da Empresa para que eu possa pesquisar e trazer os dados no MB... Abaixo os metodos do retorno da navegação
public String nova() {
        return "new";
    }

    public String editar() {
        return "edit";
    }
E no construtor do outro MB testo o ID
public EmpresaMB() {
        if (id == null) {
            empresa = new Empresa();
        } else {
            EmpresaDAO dao = new EmpresaDAO();
            empresa = dao.findById(id);
        }
    }

Desde ja obrigado!

5 Respostas

marcosbrandao

Como está declarado o seu mBean no faces-config?

G

Olá!

Esta assim:
&lt;?xml version='1.0' encoding='UTF-8'?&gt;

&lt;!-- =========== FULL CONFIGURATION FILE ================================== --&gt;

&lt;faces-config version="1.2" 
              xmlns="http://java.sun.com/xml/ns/javaee" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;
    
    &lt;application&gt;
        &lt;locale-config&gt;            
            &lt;default-locale&gt;pt_BR&lt;/default-locale&gt;            
        &lt;/locale-config&gt;
        
        &lt;view-handler&gt;com.sun.facelets.FaceletViewHandler&lt;/view-handler&gt;
    &lt;/application&gt;
    
    &lt;converter&gt;
        &lt;converter-for-class&gt;java.lang.Enum&lt;/converter-for-class&gt;
        &lt;converter-class&gt;br.com.fef.mbeans.converter.EnumTypeConverter&lt;/converter-class&gt;
    &lt;/converter&gt;
    
    &lt;!-- EmplogMB --&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;EmplogMB&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;br.com.fef.mbeans.EmplogMB&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
    &lt;/managed-bean&gt; 
    &lt;navigation-rule&gt;
        &lt;from-view-id&gt;/log_empresa.xhtml&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;home&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/app/home.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;new&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/empresa.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;edit&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/empresa.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
    &lt;/navigation-rule&gt;
    &lt;!-- End of EmplogMB --&gt;
    
    &lt;!-- EmpresaMB --&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;EmpresaMB&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;br.com.fef.mbeans.EmpresaMB&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
    &lt;/managed-bean&gt;    
    &lt;navigation-rule&gt;
        &lt;from-view-id&gt;/empresa.xhtml&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;success&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/log_empresa.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
    &lt;/navigation-rule&gt;
    &lt;!-- End of EmpresaMB --&gt;
    
&lt;/faces-config&gt;

Ja tentei colocar um f:param no commandButton mas parece que não da certo com ele....
Obrigado pela atenção!

marcosbrandao

Inicialmente parece estar certo.

Visualize o fonte da pagina gerada em html pra ver se o código está sendo gerado certo.

Talvez seja algum componente richFaces que possa está causando isso. Nunca usei richfaces portanto não posso afirmar nada.

Leozin

cara, não sei se você percebeu…

public EmpresaMB() { if (id == null) { empresa = new Empresa(); } else { EmpresaDAO dao = new EmpresaDAO(); empresa = dao.findById(id); } }
mas o else NUNCA vai ser executado

G

Olá!

:shock: Leozin pois é, na correria a gente acaba fazendo besteira…
Bom resolvi, não sei se é o modo mais elegante assim:

&lt;!-- EmplogMB --&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;EmplogMB&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;br.com.fef.mbeans.EmplogMB&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
    &lt;/managed-bean&gt; 
    &lt;navigation-rule&gt;
        &lt;from-view-id&gt;/log_empresa.xhtml&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;home&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/app/home.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;        
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;empresa&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/empresa.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
    &lt;/navigation-rule&gt;
    &lt;!-- End of EmplogMB --&gt;
    
    &lt;!-- EmpresaMB --&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;EmpresaMB&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;br.com.fef.mbeans.EmpresaMB&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
        &lt;managed-property&gt;
            &lt;property-name&gt;id&lt;/property-name&gt;
            &lt;property-class&gt;java.lang.Long&lt;/property-class&gt;
            &lt;value&gt;#{EmplogMB.id}&lt;/value&gt;
        &lt;/managed-property&gt;        
    &lt;/managed-bean&gt;    
    &lt;navigation-rule&gt;
        &lt;from-view-id&gt;/empresa.xhtml&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;success&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/log_empresa.xhtml&lt;/to-view-id&gt;
            &lt;redirect/&gt;
        &lt;/navigation-case&gt;
    &lt;/navigation-rule&gt;
    &lt;!-- End of EmpresaMB --&gt;

@PostConstruct private void init() { if (id != null) { EmpresaDAO dao = new EmpresaDAO(); empresa = dao.findById(id); } else { empresa = new Empresa(); } }

Criado 6 de março de 2008
Ultima resposta 7 de mar. de 2008
Respostas 5
Participantes 3