Atualizando Managed Bean com objeto errado

0 respostas
L

E aí pessoal!

Estou com um pequeno problema em uma app que estou desenvolvendo. JSF 2.0 / Primefaces.

No xhtml abaixo:

<p:tabView id="tabView" value="#{mbtreinamentoModelo.treinos}" var="treino" dynamic="true" effect="fade" effectDuration="normal">
                <p:ajax event="tabClose" listener="#{mbtreinamentoModelo.onTabClose}" update=":form:growl"/>

                <p:tab title="Treino #{treino.sequencia}" closable="true">
                    <h:panelGrid columns="4">
                        <h:outputText value="Observações" />
                        <p:inputTextarea rows="2" cols="130" maxlength="50" required="false" />
                        <h:outputText value="" />
                        <h:outputText value="" />

                        <h:outputText value="Exercício" />
                        <p:selectOneMenu value="#{mbtreinamentoModelo.exercicioSelected}" effect="fade" converter="exercicioConverter" id="exer"> 
                            <p:ajax event="change" update="exer" process="@this" />
                            <f:selectItems value="#{mbtreinamentoModelo.exercicios}" var="exercicio" itemLabel="#{exercicio.descricao}" itemValue="#{exercicio}" /> 
                        </p:selectOneMenu>
                        
                        <p:commandButton value="Add exercício" action="#{mbtreinamentoModelo.adicionaExercicio(e)}" ajax="true" update=":form:growl, exercicios">
                            <f:setPropertyActionListener value="#{mbtreinamentoModelo.exercicioSelected}" target="#{mbtreinamentoModelo.exercicioAux}"/>
                            <f:setPropertyActionListener value="#{treino}" target="#{mbtreinamentoModelo.treinoSelected}"/>
                        </p:commandButton>

                        <h:outputText value=""/>
                    </h:panelGrid>

                    <p:dataList value="#{mbtreinamentoModelo.exercicios(treino)}" id="exercicios" var="exercicioTreino" type="none">  
                        <p:column headerText="Exercício">
                            <p:commandButton title="Remover exercício" icon="ui-icon-closethick" action="#{mbtreinamentoModelo.removeExercicio(e)}" ajax="true" update=":form:growl,:form,exercicios">
                                <f:setPropertyActionListener value="#{exercicioTreino}" target="#{mbtreinamentoModelo.exercicioRemove}" />
                            </p:commandButton>
                        </p:column>

                        <p:column headerText="Exercício">
                            #{exercicioTreino.idExercicio.descricao} 
                        </p:column>
                        <br/>
                    </p:dataList>
                </p:tab>
            </p:tabView>

É um objeto Fase que possui vários treinos. Na view, esses treinos são abas que mantém o mesmo comportamento em todas as abas.

O problema que encontro é o seguinte: Supondo que eu tenha dois treinos. Quando clico no botão Add exercício da primeira aba, ao passar o objeto exercicio selecionado do combo box para a variável exercicioAux no managed bean, ele está assumindo o conteúdo selecionado do combo box da segunda aba e não da primeira.
Debugando o código, vi que a princípio ele atribui o objeto correto(que foi selecionado na primeira aba), mas que antes de fazer o método adicionaExercicio(e) ele atribui com o objeto selecionado na segunda aba.

ManagedBean

public void setExercicioAux(Exercicios exercicioAux) {
        if (exercicioAux != null) {
            this.exercicioAux = exercicioAux;
        }
    }

    public Exercicios getExercicioAux() {
        return this.exercicioAux;
    }

A estrutura que foi montada o xhtml está incorreta?
Alguém sabe como eu poderia resolver tal problema?

Obrigado!

Criado 30 de abril de 2012
Respostas 0
Participantes 1