1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Primefaces - Problema dialog c/ ConversationScope

Estou montando uma view para fazer a visualização e cadastro de usuários. Nesta view lista os usuarios e posso fazer a exclusão dele. Ao clicar no botão excluir, chamo um dialog para confirmar, problema que quando chamo o dialog, ele esta criando o managed bean.

O Actionlistener no commandbutton, inicia a conversação. Quando executo o action, ele não utiliza a conversation aberta.

UsuarioManager (Bean)

@Named
@ConversationScoped
public class UsuarioManager extends AbstractManager implements Serializable {

    private static final long serialVersionUID = 1L;

    @EJB
    private UsuarioRemote usuarioRemote;
    private Usuario usuario = new Usuario();
    private List<Usuario> listaUsuarios;
    private int totalLista;

    @Inject
    private Conversation conversation;        

    public int getTotalLista() {
        return listaUsuarios.size();
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public List<Usuario> getListaUsuario() {
        if (this.listaUsuarios == null) {
            this.listaUsuarios = usuarioRemote.findAll();
        }
        return listaUsuarios;
    }

    public void setListaUsuarios(List<Usuario> listaUsuarios) {

        this.listaUsuarios = listaUsuarios;
    }

    public String excluir(Long idUsuario) {
        Usuario usuario = usuarioRemote.findById(idUsuario);
        try {
            usuarioRemote.excluir(usuario);
        } catch (Exception e) {
            facesMessageManager.addMessageException(e);
        }
        this.listaUsuarios = usuarioRemote.findAll();
        return "listarUsuario?faces-redirect=true";
    }

    public String salvar() {
        String navegacao = null;
        try {
            if (conversation.isTransient()) {
                conversation.begin();
            }
            this.usuario = usuarioRemote.salvar(this.usuario);
            facesMessageManager.addMessageInfo("Usuario salvo com sucesso...");
            conversation.end();
            this.listaUsuarios = usuarioRemote.findAll();
            navegacao = "/listarUsuario.xhtml?faces-redirect=true";
        } catch (Exception e) {
            facesMessageManager.addMessageException(e);
        }
        return navegacao;
    }

    public String atualizar() {
        String navegacao = null;
        try {
            this.usuario = usuarioRemote.atualizar(this.usuario);
            facesMessageManager
                    .addMessageInfo("Usuario atualizado com sucesso...");
            conversation.end();
            this.listaUsuarios = usuarioRemote.findAll();
            navegacao = "/listarUsuario.xhtml?faces-redirect-true";
        } catch (Exception e) {
            facesMessageManager.addMessageException(e);
        }
        return navegacao;
    }

    public void novo(ActionEvent event) {
        cancelar(event);
        conversation.begin();
        this.usuario = new Usuario();
    }

    public void editar(Long idUsuario) {
        conversation.begin();
        this.usuario = usuarioRemote.findById(idUsuario);
    }

    public void cancelar(ActionEvent event) {
        if (!conversation.isTransient()) {
            conversation.end();
        }    
        this.listaUsuarios = usuarioRemote.findAll();
    }


}

listaUsuarioxhtml: Deixei ela resumida:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">


    <ui:define name="content">

        <p:messages id="messages" showDetail="true" shautoUpdate="true"
            closable="true" showSummary="false" />

        <div class="layout-portlets-box">
            <div class="Container100">
                <div class="ContainerIndent">
                    <h1 class="SmallTopic Container100">Usuários</h1>

                    <h:form id="frmlistarUsuario">

                        <br />


                        <br />

                        <div align="left">
                            <p:commandButton value="Novo Usuário" icon="ui-icon-plus"
                                actionListener="#{usuarioManager.novo}"
                                action="/formUsuario.xhtml?faces-redirect-true" ajax="false" />

                            <br /> <br />
                        </div>
                        <p:dataTable id="dtUsuario"
                            emptyMessage="Nenhum registro encontrado." rows="10"
                            paginator="true" paginatorPosition="bottom"
                            value="#{usuarioManager.listaUsuario}" var="usuario">
                            <f:facet name="header">
                                <h:outputText value="Lista de usuários" />
                            </f:facet>

                            <p:column style="width:80px">
                                <f:facet name="header">
                                    <h:outputText value="Id. Usuário" />
                                </f:facet>
                                <h:outputText value="#{usuario.idUsuario}" />
                            </p:column>

                            <p:column style="width:200px" sortBy="#{usuario.login}">
                                <f:facet name="header">
                                    <h:outputText value="Login" />
                                </f:facet>
                                <h:outputText value="#{usuario.login}" />
                            </p:column>

                            <p:column sortBy="#{usuario.nome}">
                                <f:facet name="header">
                                    <h:outputText value="Nome" />
                                </f:facet>
                                <h:outputText value="#{usuario.nome}" />
                            </p:column>

                            <f:facet name="footer">
                                <h:outputText
                                    value="Há um total de #{usuarioManager.totalLista} Usuário(s) no sistema." />
                            </f:facet>

                            <p:column style="width:120px">
                                <f:facet name="header">
                                    <h:outputText value="Opções " />
                                </f:facet>

                                <p:commandButton     icon="ui-icon-refresh" 
                                                    id="testeButton" 
                                                    oncomplete="PF('testeDialogW').show()"
                                                    actionListener="#{usuarioManager.editar(usuario.idUsuario)}">
                                </p:commandButton>

                            </p:column>


                        </p:dataTable>

                        <p:dialog id="testeDialog" widgetVar="testeDialogW" modal="true" header="Teste de Dialog">
                            <p:commandButton value="Salvar"
                            action="#{usuarioManager.atualizar()}"
                            ></p:commandButton>
                        </p:dialog>

                    </h:form>

                </div>
            </div>
        </div>
    </ui:define>
</ui:composition>
  • Algum motivo pra não utilizar o ViewScope do CDI?

    Error   07 de mai de 2015
  • Quando editar um usuario. vai chamar outro xhtml.. da pra passar o usuario que será editado.. utilizo a conversation.. se for usar ViewScope.. quando chamar a tela de edição. vai criar novamente o Bean? Como poderia passar valor para o Bean.. ou seria melhor criar um especifico para o Bean da edição?

    Rodrigo Cristo Führ   08 de mai de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags primefaces web ou faça a sua própria pergunta.