Olá a todos!
Estou com um problema em trabalhar com um Managed Bean configurado em @ConversationScoped. Eu inicio uma conversação num metodo set de um atributo do meu bean (atributo tarefa), mas no segundo request que eu faço (chamada do metodo salvar), o objeto tarefa é um novo objeto e o status da conversação está transiente, mesmo sem eu tê-la finalizado.
O primeiro request é chamado de um link em uma coluna de um dataTable de tarefas, correspondente ao nome do colaborador responsavel por aquela tarefa.
O segundo request é feito através de um a4j:commandButton dentro de um popup do richfaces.
Alguém saberia me dizer o que pode estar acontecendo com o escopo?
Obrigado!
------------ MANAGED BEAN -----------------
@Named
@ConversationScoped
public class TarefaController implements Serializable {
private Tarefa tarefa;
private List<Colaborador> colaboradores;
@Inject
private Conversation conversation;
//outros atributos
public void setTarefa(Tarefa tarefa) {
conversation.begin();
this.tarefa = tarefa;
}
public String salvar() {
//
//Salva ou faz update de tarefa no banco
//
if (!conversation.isTransient()) {
conversation.end();
}
return "listaTarefas";
} catch (Exception e) {
e.printStackTrace();
return "";
}
//entre outros metodos
}
--------------- Campo que faz o primeiro request setando o atributo do bean com a tarefa a ser alterada ---------------
<rich:column>
<f:facet name="header">
<h:outputText value="Colaborador"/>
</f:facet>
<h:outputText value="#{tarefas.colaborador.nome}" rendered="#{not empty tarefas.colaborador}"/>
<a4j:commandLink id="adicionaColaborador" rendered="#{empty tarefas.colaborador}" value="Adicionar Colaborador" oncomplete="#{rich:component('popupColaboradores')}.show()" render="popup">
<f:setPropertyActionListener target="#{tarefaController.tarefa}" value="#{tarefas}"/>
</a4j:commandLink>
</rich:column>
-------------- Popup do XHTML ---------------
<rich:popupPanel id="popupColaboradores" resizeable="true" height="100" width="350" domElementAttachment="form">
<f:facet name="header">
<h:outputText value="Selecione o colaborador"/>
</f:facet>
<f:facet name="controls">
<h:outputLink value="#"
onclick="#{rich:component('popupColaboradores')}.hide(); return false;">
X
</h:outputLink>
</f:facet>
<h:panelGrid columns="2">
<h:outputText value="Colaboradores:"/>
<rich:select id="cbbPopupColaboradores" value="#{tarefaController.tarefa.colaborador}" converter="#{colaboradorConverter}">
<f:selectItems value="#{tarefaController.colaboradores}" var="colaborador" itemLabel="#{colaborador.nome}" itemValue="#{colaborador.nome}"/>
</rich:select>
<br/>
<br/>
<center>
<a4j:commandButton value="Adicionar" render="panel" action="#{tarefaController.salvar}" execute="cbbPopupColaboradores" onclick="#{rich:component('popupColaboradores')}.hide();"/>
</center>
</h:panelGrid>
</rich:popupPanel>