Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 行编辑dataTable Primefaces上的筛选行_Jsf_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 行编辑dataTable Primefaces上的筛选行

Jsf 行编辑dataTable Primefaces上的筛选行,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,我正在使用primefaces dataTable和rowEdit事件来更改和保存数据表中的值。当我编辑未过滤的行值时,它工作正常,但当我过滤值并尝试编辑时,编辑的id错误 例如: 我有一个包含5条记录的列表,ID从1到5不等 我过滤列表以显示id=5的记录,因此它只显示一行。 当我尝试编辑此记录时,我的bean正确地获取了值,但是对象的id不是5,而是1,在我应用过滤器之前,它位于datatable的第一行。 如果我编辑过滤表的第二行,它将获得原始datatable的第二行的id,而不使用过滤

我正在使用primefaces dataTable和rowEdit事件来更改和保存数据表中的值。当我编辑未过滤的行值时,它工作正常,但当我过滤值并尝试编辑时,编辑的id错误

例如: 我有一个包含5条记录的列表,ID从1到5不等

我过滤列表以显示id=5的记录,因此它只显示一行。 当我尝试编辑此记录时,我的bean正确地获取了值,但是对象的id不是5,而是1,在我应用过滤器之前,它位于datatable的第一行。 如果我编辑过滤表的第二行,它将获得原始datatable的第二行的id,而不使用过滤器

屏幕:

<p:dataTable id="dataTable" var="linha" rowKey="#{linha.id}"
                            value="#{gestor.listaGestor}" editable="true"
                            draggableColumns="true" 
                            rendered="#{not empty gestor.listaGestor}"
                            widgetVar="tableGestor" filteredValue="#{gestor.filteredGestor}"
                            emptyMessage="Não existem registros." resizableColumns="true" styleClass="datatable_cadastro" liveResize="true">

                            <f:facet name="header">
                                Tabela Gestores
                                <p:commandButton id="toggler" type="button" value="Colunas" />
                                <p:columnToggler datasource="dataTable" trigger="toggler" />
                            </f:facet>

                            <p:ajax event="rowEdit" listener="#{gestor.onRowEdit}"
                                update=":edicao:msgs,:edicao:dataTable" />
                            <p:ajax event="rowEditCancel" listener="#{gestor.onRowCancel}"
                                update=":edicao:msgs" />

                            <p:column headerText="ID" sortBy="#{linha.id}" filterBy="#{linha.id}"
                                style="width:50px;">
                                <p:outputLabel value="#{linha.id}" style="width:100%" />
                            </p:column>
                            <p:column headerText="NOME" filterBy="#{linha.nome}"
                                filterMatchMode="contains" sortBy="#{linha.nome}"
                                style="width:100%;">
                                <p:cellEditor>
                                    <f:facet name="output">
                                        <h:outputText value="#{linha.nome.trim()}" />
                                    </f:facet>
                                    <f:facet name="input">
                                        <p:inputTextarea value="#{linha.nome}" id="nome"
                                            update=":edicao" style="width:100%" />
                                    </f:facet>
                                </p:cellEditor>
                            </p:column>
                            <p:column headerText="E-MAIL"
                                style="width:100%;" sortBy="#{linha.email}"
                                filterBy="#{linha.email}" filterMatchMode="contains">
                                <p:cellEditor>
                                    <f:facet name="output">
                                        <h:outputText value="#{linha.email.trim()}" />
                                    </f:facet>
                                    <f:facet name="input">
                                        <p:inputTextarea value="#{linha.email}" id="email"
                                            update=":edicao" />
                                    </f:facet>
                                </p:cellEditor>
                            </p:column>
                            <p:column headerText="ATIVO" style="width:150px;" filterBy="#{linha.ativo}" filterMatchMode="equals">
                                    <f:facet name="filter">
                                        <p:selectOneMenu onchange="PF('tableGestor').filter()" >
                                            <f:converter converterId="javax.faces.Character"/>
                                            <f:selectItem itemLabel="TODOS" itemValue=""/>
                                            <f:selectItem itemLabel="ATIVO" itemValue="T"/>
                                            <f:selectItem itemLabel="INATIVO" itemValue="F"/>
                                        </p:selectOneMenu>
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output">
                                            <p:selectBooleanCheckbox value="#{gestor.charToBool(linha.ativo)}" disabled="true"/> 
                                        </f:facet>
                                        <f:facet name="input">
                                            <p:selectBooleanCheckbox value="#{gestor.ativo}" id="ativo" immediate="true" update=":edicao" style="width:100%;"/>
                                        </f:facet>
                                    </p:cellEditor>    
                                </p:column>
                            <p:column headerText="!" style="width:40px">
                                <p:rowEditor/>
                            </p:column>
                            <p:column headerText="X" style="width:40px">
                                <p:commandLink styleClass="ui-icon ui-icon-trash"
                                    action="#{gestor.deletar(linha)}" update=":edicao" />
                            </p:column>

                        </p:dataTable>

当我使用@requestScoped bean时,这种情况就发生了。我切换到@ViewScoped,它工作正常。

您使用的Primefaces版本是什么?嗨,Deoxysia,Primefaces 5.0正是!我改变了我的bean范围,这样就可以正常工作了!谢谢
    public void onRowEdit(RowEditEvent event){

        Object value = event.getObject();

        GestorVO gestorTela = (GestorVO) value;

        SimpleDateFormat dataHora = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

        FacesContext context = FacesContext.getCurrentInstance();

        if(gestorTela.getId() != null){

            if(ativo){
                gestorTela.setAtivo('T');
            } else {
                gestorTela.setAtivo('F');
            }

            GestorRN gestorRN = new GestorRN();
            GestorVO gestorAntes = gestorRN.getByPrimaryKey(gestorTela.getId());

            /** CONSISTENCIA DOS CAMPOS */

            /** IF CASO O CONTEUDO DOS CAMPOS SEJA NULO */
            if (gestorTela.getNome().trim().isEmpty() || gestorTela.getEmail().trim().isEmpty() ) {

                gestorTela.setNome(gestorAntes.getNome());
                gestorTela.setEmail(gestorAntes.getEmail());
                gestorTela.setAtivo(gestorAntes.getAtivo());

                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Alteração foi cancelada" ,"Nenhum campo pode estar vazio ou conter apenas espaço(s)." ));

            } else {
                /** IF CASO O CONTEUDO FOI SALVO MAS NÃO HOUVERAM ALTERAÇÕES NO REGISTRO */
                if (gestorAntes.getNome().trim().equals(gestorTela.getNome().trim()) 
                    && gestorAntes.getEmail().trim().equals(gestorTela.getEmail().trim())
                    && gestorAntes.getAtivo() == gestorTela.getAtivo() ) {

                    gestorTela.setNome(gestorAntes.getNome());
                    gestorTela.setEmail(gestorAntes.getEmail());
                    gestorTela.setAtivo(gestorAntes.getAtivo());

                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Alteração foi cancelada" ,"Não houve alteração no registro" ));
                }
                /** CASO O CONTEUDO TENHA SIDO REALMENTE ALTERADO, SALVA O CONTEUDO */
                else{
                    /** Realiza o trim para limpeza dos campos antes da gravação*/
                    gestorTela.setNome(gestorTela.getNome().trim());
                    gestorTela.setEmail(gestorTela.getEmail().trim());
                    gestorTela.setUsuarioAlteracao(loginRN.usuarioLogado().getNome());
                    gestorTela.setDataAlteracao(dataHora.format(new Date()));
                    /** Caso ocorra erros no método salvar, a tela retornará para os valores padrões antes da alteração */
                    boolean confirmacao = gestorRN.salvar(gestorTela);

                    if(!confirmacao) {
                        gestorTela.setNome(gestorAntes.getNome());
                        gestorTela.setEmail(gestorAntes.getEmail());
                        gestorTela.setAtivo(gestorAntes.getAtivo());
                    }
                }
            }
        } else {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ID do objeto Gestor não identificado" ,"Não foi possível identificar o ID do Gestor selecionado. Informe o ocorrido ao administrador do sistema" ));
        }
    }