AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-1969849

Liliymas's questions

Martin Hope
Liliymas
Asked: 2024-01-25 20:23:05 +0800 CST

Obtém seleção aleatória de dataTable quando cancelo a caixa de diálogo de detalhes mestre

  • 6

Eu tenho um DataTable de seleção básica com uma lista de emails e um bean SessionScope. Quando edito um e-mail, aparece uma caixa de diálogo com o e-mail a ser editado. O primeiro que seleciono é o e-mail correto, mas quando seleciono outro e-mail, um e-mail aleatório aparece. Não entendo por que isso está acontecendo. Verifiquei a documentação oficial do Primefaces 5 e tentei todos os métodos citados no código, além de apenas utilizar uma action e passar o email diretamente na action. Acontece que quando cancelo a caixa de diálogo, o próximo e-mail selecionado e todos os outros, exceto o primeiro, são e-mails aleatórios. Obrigado pela ajuda.

Meu xhtml:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:pe="http://primefaces.org/ui/extensions"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    template="/facelets/template.xhtml">

    <ui:define name="headpage">
        <ui:include src="/facelets/head.xhtml"></ui:include>
    </ui:define>

    <ui:define name="bodypage">
        <f:event type="preRenderView" listener="#{emailBean.cargaListaEmail}" />
        <f:event
            listener="#{busquedaSugerenciasExpedientesBean.resetCajita()}"
            type="preRenderView" />

        <pe:importConstants
            className="es.ja.csalud.sas.intranet.buzoncontacto.constantes.NombreAtributos"
            var="nombreAtributos" />
        <pe:importConstants
            className="es.ja.csalud.sas.intranet.buzoncontacto.constantes.Cadenas"
            var="cadenas" />
        <pe:importConstants
            className="es.ja.csalud.sas.intranet.buzoncontacto.constantes.NavigationRules"
            var="navigationRules" />
        <div class="container">
            <div class="cajaConfiguracion">
                <h:form id="formApertura" styleClass="formApertura">
                    <div class="cabeza">
                        <h2 class="pageTitle">#{lbl.configuracion_titulo_emails}</h2>
                    </div>

                    <p:accordionPanel multiple="true" activeIndex="0" id="acordeon">
                        <p:tab title="#{lbl.configuracion_titulo_emails}">

                            <div class="fluido anchoCompleto">
                                <p:dataTable id="tablaEmails" var="email"
                                    styleClass="dt_configuracion"
                                    tableStyle="table-layout: auto; width:100%" widgetVar="email"
                                    value="#{emailBean.listaEmails}" editable="true"
                                    sortBy="#{email.nombreEmail}" rows="10" paginator="true"
                                    paginatorTemplate="{PreviousPageLink} {PageLinks} {NextPageLink} {CurrentPageReport} {RowsPerPageDropdown}"
                                    currentPageReportTemplate="{currentPage} DE {totalPages}"
                                    rowsPerPageLabel="Mostrar"
                                    rowsPerPageTemplate="5,10,50,100,{ShowAll|'Todo'}"
                                    paginatorPosition="bottom" rowKey="#{email.idEmail}"
                                    emptyMessage="#{msg.tbl_noRegist}"
                                    >
                                    
                                    <p:ajax event="rowSelect" 
                                            listener="#{grupoBean.onRowSelect}" update="@this" />
                                    
                                    <p:column headerText="#{lbl.nombre_email}"
                                        sortBy="#{email.nombreEmail}">
                                        <h:outputText value="#{email.nombreEmail}" />
                                    </p:column>
                                    <p:column headerText="#{lbl.editor}"
                                        sortBy="#{email.modificador}">
                                        <h:outputText value="#{email.modificador}" />
                                    </p:column>
                                    <p:column headerText="#{lbl.f_modificado}"
                                        sortBy="#{email.fechaModificacion}">
                                        <h:outputText value="#{email.fechaModificacion.toDate()}">
                                            <f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" />
                                        </h:outputText>
                                    </p:column>
                                    <p:column headerText="#{lbl.activo}" sortBy="#{email.activo}">
                                        <h:outputText value="#{email.activo ? 'Si' : 'No'}" />
                                    </p:column>

                                    <p:column styleClass="enlaceEdicion accionConfiguracion"
                                        headerText="#{lbl.list_acciones}">
                                        <h:outputText value="" />
                                        <p:commandButton value="#{lbl.bt_editar}"
                                                         title="#{lbl.bt_editar}"
                                                         icon="fa fa-edit"
                                                         action="#{emailBean.editarEmail()}"
                                                         process="@this"
                                                         update=":formApertura:acordeon:dialogAnadirEmail"
                                                         oncomplete="PF('dialogAnadirEmail').show();"
                                                         >
<!--                                            <p:ajax event="click" listener="#{emailBean.setEmailSeleccionada(email)}" update="@none" /> -->
<!--                                            <p:confirm header="Editar Email" -->
<!--                                                       message="¿Está seguro que desea editar #{email.nombreEmail}?" -->
<!--                                                       icon="ui-icon-alert" /> -->
<!--                                            <f:setPropertyActionListener value="#{email}" -->
<!--                                                  target="#{emailBean.emailSeleccionada}"/> -->
                                                <f:actionListener
                                                binding="#{emailBean.setEmailSeleccionada(email)}" />
                                        </p:commandButton>



                                        <p:commandButton value="#{lbl.bt_eliminar}" id="btnEliminar"
                                            title="#{lbl.bt_eliminar}" icon="far fa-trash-alt"
                                            action="#{emailBean.borrarEmail()}" process="@this"
                                            update=":msgs :formApertura:acordeon:tablaEmails">
                                            <f:setPropertyActionListener value="#{email}"
                                                target="#{emailBean.emailSeleccionada}" />
                                            <p:confirm header="Eliminar Email"
                                                message="¿Está seguro que desea eliminar #{email.nombreEmail}?"
                                                icon="ui-icon-alert" />

                                        </p:commandButton>

                                    </p:column>
                                </p:dataTable>
                            </div>
                            <!-- DIALOGO PARA AÑADIR/EDITAR TIPO DE GESTION MASIVA -->
                            <p:dialog header="#{lbl.email_configuracion}"
                                widgetVar="dialogAnadirEmail" id="dialogAnadirEmail"
                                modal="true" minimizable="false" maximizable="false"
                                closable="true" styleClass="modal1Filas1Campos"
                                resizable="false">
                                <h:panelGroup id="panel">
                                    <div class="grupoFiltrosAlineados">
                                        <div class="classFiltrosAlineados">
                                            <h:outputLabel class="labelFiltrosAlineados labelEstilo"
                                                value="#{lbl.nombre_email}" />
                                            <p:inputText styleClass="uiFiltrosAlineados"
                                                label="#{lbl.nombre_email}" required="true"
                                                value="#{emailBean.emailEditar.nombreEmail}">
                                                <f:validateLength maximum="200" />
                                                <f:validator validatorId="com.emailValidator" />
                                            </p:inputText>
                                        </div>


                                        <div class="classFiltrosAlineados">
                                            <h:outputLabel class="labelFiltrosAlineados labelEstilo"
                                                value="#{lbl.activo} " />
                                            <p:selectBooleanCheckbox
                                                styleClass="botonCheckbox labelCheck checkMargen"
                                                value="#{emailBean.emailEditar.activo}">
                                                <p:ajax event="change" process="@this" update="@this" />
                                            </p:selectBooleanCheckbox>
                                        </div>

                                    </div>
                                </h:panelGroup>

                                <br />

                                <p:commandButton styleClass="botonOtros"
                                    value="#{lbl.bt_aceptar}" process="@this dialogAnadirEmail"
                                    action="#{emailBean.saveEmail()}"
                                    update=":msgs formApertura:acordeon:tablaEmails">
                                </p:commandButton>

                                <p:commandButton styleClass="botonOtros"
                                    value="#{lbl.bt_cancelar}" type="button"
                                    action="#{emailBean.cleanData()}"
                                    onclick="PF('dialogAnadirEmail').hide();" 
                                />
                            </p:dialog>

                            <!-- BOTONES  -->
                            <h:panelGroup id="botonera">
                                <div class="botones grandes izquierda">

                                    <p:commandButton value="#{lbl.bt_anadir}"
                                        styleClass="botonOtros"
                                        action="#{emailBean.editarEmailCrear()}" immediate="true"
                                        oncomplete="PF('dialogAnadirEmail').show();" process="@this"
                                        update=":formApertura:acordeon:dialogAnadirEmail" />

                                </div>
                            </h:panelGroup>
                            <!--   -->
                        </p:tab>
                    </p:accordionPanel>

                    <p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
                        <p:commandButton value="Sí" styleClass="ui-confirmdialog-yes"
                            icon="ui-icon-check" />
                        <p:commandButton value="No" styleClass="ui-confirmdialog-no"
                            icon="ui-icon-close" />
                    </p:confirmDialog>

                </h:form>
            </div>
        </div>
    </ui:define>
    <ui:define name="footpage">
        <ui:include src="/facelets/foot.xhtml"></ui:include>
    </ui:define>
</ui:composition>

Minha aula de feijão:

package es.ja.csalud.sas.intranet.buzoncontacto.configuracion.presentation.boundary;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;

import javax.inject.Inject;
import javax.inject.Named;

import org.joda.time.DateTime;
import org.primefaces.PrimeFaces;
import org.primefaces.event.SelectEvent;

import es.ja.csalud.sas.intranet.buzoncontacto.centros.business.entity.Centro;
import es.ja.csalud.sas.intranet.buzoncontacto.configuracion.business.boundary.Emails;
import es.ja.csalud.sas.intranet.buzoncontacto.configuracion.business.entity.Email;
import es.ja.csalud.sas.intranet.buzoncontacto.constantes.Cadenas;
import es.ja.csalud.sas.intranet.buzoncontacto.constantes.Presentacion;
import es.ja.csalud.sas.intranet.buzoncontacto.gestoresInternos.business.boundary.GestoresInternos;
import es.ja.csalud.sas.intranet.buzoncontacto.grupo.business.boundary.Grupos;
import es.ja.csalud.sas.intranet.buzoncontacto.grupo.business.entity.Grupo;
import es.ja.csalud.sas.intranet.buzoncontacto.presentation.BaseBean;
import es.ja.csalud.sas.intranet.buzoncontacto.presentation.helper.Util;
import es.ja.csalud.sas.intranet.buzoncontacto.springsecurity.presentation.boundary.UserReclamacionesBean;

@Named
@SessionScoped
public class EmailBean extends BaseBean implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -2075577773794936417L;

    @Inject
    private Emails emails;

    @Inject
    protected transient UserReclamacionesBean userReclamacionesBean;

    @Inject
    protected Grupos grupos;

    @Inject
    private GestoresInternos gestoresInternos;

    private List<Email> listaEmails;

    private Email emailSeleccionada;

    @Inject
    private UserReclamacionesBean user;

    private Email emailEditar; 
    
    private Centro centroUsuario = null;

    /**
     * Inits the.
     */
    @PostConstruct
    public void init() {
        // Obtener la lista de Emails que pertenecen al Centro Hopitalario del Usuario
        this.listaEmails = new ArrayList<>();
        this.cargaListaEmail();

        this.emailSeleccionada = new Email();
        this.emailEditar = new Email();
    }

    /**
     * Actualiza a traves de la sesion el Centro Hospitalario al que pertenece (o ha
     * seleccionado) el Usuario.
     */
    public void actualizaCentroSeleccionadoUsuario() {
        Object objCentro = getSession().getAttribute(Cadenas.CENTRO_SELECCIONADO_USUARIO);
        if (objCentro instanceof Centro) {
            centroUsuario = (Centro) objCentro;
        }
    }

    public void cargaListaEmail() {
        this.actualizaCentroSeleccionadoUsuario();

        if (null != this.listaEmails) {
            if (this.userReclamacionesBean.getRole().equals(Cadenas.BCS_ADMINISTRADOR)) {
                this.listaEmails = this.emails.findByCentro(centroUsuario.getId());
            }else if(this.userReclamacionesBean.getRole().equals(Cadenas.BCS_GESTOR_INTERNO)) {
                Grupo grupo = grupoEmail();

                this.listaEmails = this.emails.findByCentroYGrupo(grupo, centroUsuario.getId());
            }
            
        }
    }

    private Grupo grupoEmail() {
        Grupo grupo;
        if (this.userReclamacionesBean.getRole().equals(Cadenas.BCS_ADMINISTRADOR)) {
            grupo = this.grupos.getById(0L);
        } else {
            grupo = this.gestoresInternos.getGestorInternoByDNI(userReclamacionesBean.getIdentificador())
                    .getGrupoGestorInterno();
        }
        return grupo;
    }

   public void editarEmail() {
        this.emailEditar = new Email(this.emailSeleccionada);
        System.out.println("editarEmail = " + this.emailEditar.getNombreEmail());
    }

   public void prepararEdicion(Email email) {
        this.emailSeleccionada = email;
        System.out.println("email = " + email.getNombreEmail());
        editarEmail();
    }

    public void saveEmail() {
        boolean insert = true;
        Grupo grupo = this.grupoEmail();

        // Validacion
        if (this.validateEmail()) {

            if (null == this.emailEditar.getId()) {
                this.emailEditar.setFechaInicioVigencia(new DateTime());
                this.emailEditar.setCreador(user.getNameUser());
                this.emailEditar.setFechaCreacion(new DateTime());
                this.emailEditar.setFechaModificacion(new DateTime());
                this.emailEditar.setModificador(user.getNameUser());
                this.emailEditar.setGrupo(grupo);
                this.emailEditar.setIdCentro(centroUsuario.getId());
                
            } else {

                this.emailEditar.setFechaInicioVigencia(new DateTime());
                this.emailEditar.setFechaModificacion(new DateTime());
                this.emailEditar.setModificador(user.getNameUser());
                this.emailEditar.setGrupo(grupo);
                insert = false;
            }

            this.emails.guardar(this.emailEditar);

            this.emails.flush();

            if (insert) {
                this.addMessageInfo(Presentacion.LBL.getString("Guardado_correcto"),
                        Presentacion.LBL.getString("EMAIL_CONFIGURACION_CREADA"));
            }

            if (!insert) {
                this.addMessageInfo(Presentacion.LBL.getString("Guardado_correcto"),
                        Presentacion.LBL.getString("EMAIL_CONFIGURACION_MODIFICADA"));

            }

            PrimeFaces.current().executeScript("PF('dialogAnadirEmail').hide()");
            this.emailEditar = new Email();
            this.cargaListaEmail();
        }
    }

    public void cleanData() {
        this.emailEditar = new Email();
        //this.emailSeleccionada = new Email();
        //PrimeFaces.current().ajax().update("formApertura:acordeon:dialogAnadirEmail");

    }

    public void borrarEmail() {
        emailSeleccionada.setFechaFinVigencia(new DateTime());
        emailSeleccionada.setActivo(false);
        this.emails.update(emailSeleccionada);
        this.emails.flush();
        this.emailEditar = new Email();
        this.emailSeleccionada = new Email();
        this.addMessageInfo(Presentacion.EXITO_ELIMINAR, "");
        this.cargaListaEmail();
    }

    protected boolean validateEmail() {
        boolean validacion = true;

        // Validamos que sea un email correcto
        if (!Util.validateEmailNoCorporativo(this.emailEditar.getNombreEmail())) {
            this.addMessageError(Presentacion.ERROR_VALID, Cadenas.ERR_CORREO_INVALIDO);
            validacion = false;
        }

        return validacion;
    }

    public void onRowSelect(SelectEvent event) {
        final Email p = (Email) event.getObject();
        this.emailSeleccionada = p;
    }

    public void editarEmailCrear() {
        this.emailEditar = new Email();
    }

    public List<Email> getListaEmails() {
        return listaEmails;
    }

    public void setListaEmails(List<Email> listaEmail) {
        this.listaEmails = listaEmail;
    }

    public Email getEmailSeleccionada() {
        return emailSeleccionada;
    }

    public void setEmailSeleccionada(Email tipoMasivaSeleccionada) {
        this.emailSeleccionada = tipoMasivaSeleccionada;
    }

    public Email getEmailEditar() {
        return emailEditar;
    }

    public void setEmailEditar(Email tipoMasivaEditar) {
        this.emailEditar = tipoMasivaEditar;
    }

    public Centro getCentroUsuario() {
        return centroUsuario;
    }

    public void setCentroUsuario(Centro centroUsuario) {
        this.centroUsuario = centroUsuario;
    }

}
jsf
  • 1 respostas
  • 26 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve