Formulário Não Atualiza Objeto no Managed Bean

1 resposta
javer

Tenho dois forms, um com uma lista de Tabelas na qual é selecionado um objeto e carregado no segundo formulário.
Preciso salvar (com Hibernate) os dados do segundo formulário porém no meu bean o objeto não atualiza com os dados do formulário.

<!-- Formulário apenas com a relação de Tabelas -->
<h:form id="tarifasCadastradas">
    <h:outputLabel for="tarifas" value="Tarifas cadastradas: " style="width:20%" />
    <h:selectOneMenu
        id="tarifas"
        value="#{tarifaBean.item}"
        style="width:80%"
        valueChangeListener="#{tarifaBean.tarifaChanged}"
        immediate="true" >
        <f:selectItems var="tarifa" id="tarifa" value="#{tarifaBean.listaTarifas}" />
        <a4j:support event="onchange" reRender="formTeste" />
        <f:converter converterId="ConverterTarifa" />
    </h:selectOneMenu>
</h:form>

<!-- Formulário com os dados da Tabela selecionada -->
<a4j:form requestDelay="20" ignoreDupResponses="true" id="formTeste">
    <h:outputLabel for="nome" value="Nome da Tarifa"/>
    <h:inputText id="nomeTabela" size="30" value="#{tarifaBean.item.nome}" style="width:100%" >
        <rich:ajaxValidator event="onblur"/>
    </h:inputText>
    <rich:message for="nome" style="color:red" globalOnly="false"/>

    <!-- Quando esse Action é acionada não tem nada no objeto do bean -->
    <a4j:commandButton
        value="Salvar Tarifa"
        title="Salvar esse cadastro"
        ajaxSingle="false"
        immediate="true"
        actionListener="#{tarifaBean.salvar}" />
</a4j:form>
No managed bean:
// Aqui mostra corretamente a propriedade do item selecionado
    public void tarifaChanged(ValueChangeEvent e) {
        item = (Tarifa) e.getNewValue();
        setItem(item);
        if (item.getId() == 0) {
            item.setDataCadastro(new Date());
        }
        System.out.println("Nome da Tarifa: "+item.getNome());
    }

    // Aqui nao mostrada nada na mesma propriedade do item selecionado
    public void salvar(ActionEvent event) {
        System.out.println("== SALVAR DADOS COM HIBERNATE ");
        System.out.println("Nome Tabela: "+item.getNome());
    }

Onde estou fazendo algo errado? Aparentemente no formulário mas não ainda não descobri o que pode ser, já tentei de tudo que aprendi até agora e nada, no Action salvar nunca imprime o nome da Tabela supostamente selecionada.

Agradeço qualquer dica!

1 Resposta

M

Olá javer!

Cara não seu se irá resolver seu problema!
Mas acredito que o seu problema seja que um form não é ajax, então ele deve perder o valor ao dar o request!

Tente usar a tag:

<a4j:keepAlive beanName="nomeDoSeuBean"></a4j:keepAlive>

Essa tag faz com que ao dar um request você não perca os dados!

Abraços, espero que ajude!

Criado 30 de junho de 2009
Ultima resposta 30 de jun. de 2009
Respostas 1
Participantes 2