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!