在主面5.2中应用过滤器后,选择了错误的行进行编辑

时间:2015-11-01 21:49:40

标签: primefaces

在使用primefaces 5.2和jsf 2.2应用默认过滤器后,我在行选择方面存在问题 Primefaces默认过滤器工作正常,但是当我选择要编辑的行时,我得到了错误的行。  我的代码附在下面:

    <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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="../template/template.xhtml">

    <ui:define name="container clearfix">
        <ui:insert>

            <h:form id="Type_Utilisateur_Form">

                <p:commandLink action="#{typeUtilisateurBean.create()}"
                    oncomplete="PF('popAddTypeUtilisateur').show();"
                    style="font-size: 15px;">
                        Add user type                       
                    </p:commandLink>


                <p:outputPanel id="Type_Utilisateur_List">
                    <p:dataTable var="typeUtilisateur"
                        value="#{typeUtilisateurBean.listTypeUtilisateur}"
                        widgetVar="Type_Utilisateur_Table" rows="3" paginator="true"
                        rendered="true" emptyMessage="No records found with given criteria"
                        >

                        <f:facet name="header">
                            <p:outputPanel >
                                <p:inputText id="globalFilter"
                                    onkeyup="PF('Type_Utilisateur_Table').filter()"
                                    style="width:150px" placeholder="Search fields" />
                            </p:outputPanel>
                        </f:facet>

                        <p:column headerText="User Type designation"
                            sortBy="#{typeUtilisateur.designationTypeUtilisateur}"
                            filterBy="#{typeUtilisateur.designationTypeUtilisateur}"
                            filterStyle="display:none">
                            <h:outputText
                                value="#{typeUtilisateur.designationTypeUtilisateur}" />
                        </p:column>
                        <p:column headerText="Actions" style="width:120px">
                            <p:outputPanel>

                                <p:commandLink action="#{typeUtilisateurBean.getRow()}"
                                    oncomplete="PF('popEditTypeUtilisateur').show();">
                                    <p:graphicImage value="../template/images/file_edit.png"
                                        width="48" height="48"></p:graphicImage>
                                </p:commandLink>

                                <p:commandLink action="#{typeUtilisateurBean.delete}"
                                    update=":Type_Utilisateur_Form:Type_Utilisateur_List"
                                    style="float: right;">
                                    <p:graphicImage value="../template/images/file_delete.png"
                                        width="48" height="48"></p:graphicImage>
                                </p:commandLink>


                            </p:outputPanel>
                        </p:column>
                    </p:dataTable>
                </p:outputPanel>
            </h:form>

            <p:dialog widgetVar="popEditTypeUtilisateur" modal="true"
                header="EDIT">
                <p:ajax event="close"
                    update=":Type_Utilisateur_Form:Type_Utilisateur_List" />
                <p:outputPanel autoUpdate="true">
                    <h:form>
                        <p:panelGrid columns="2" layout="grid">

                            <h:outputLabel value="User Type designation :" />
                            <p:inputText id="designationTypeUtilisateur"
                                value="#{typeUtilisateurBean.typeUtilisateur.designationTypeUtilisateur}" />

                        </p:panelGrid>
                        <p:commandButton value="Save" action="#{typeUtilisateurBean.save}"
                            oncomplete="if (!args.validationFailed) PF('popEditTypeUtilisateur').hide();" />
                        <p:commandButton value="Cancel"
                            action="#{typeUtilisateurBean.init}"
                            oncomplete="PF('popEditTypeUtilisateur').hide();" />
                    </h:form>
                </p:outputPanel>
            </p:dialog>


            <p:dialog widgetVar="popAddTypeUtilisateur" modal="true" header="Add">
                <p:ajax event="close"
                    update=":Type_Utilisateur_Form:Type_Utilisateur_List" />
                <p:outputPanel autoUpdate="true">
                    <h:form>
                        <p:panelGrid columns="2" layout="grid">


                            <h:outputLabel value=" User
                            Type designation :" />
                            <p:inputText id="designationTypeUtilisateur"
                                value="#{typeUtilisateurBean.typeUtilisateur.designationTypeUtilisateur}" />

                        </p:panelGrid>
                        <p:commandButton value="Save" action="#{typeUtilisateurBean.save}"
                            oncomplete="if (!args.validationFailed) PF('popAddTypeUtilisateur').hide();" />
                        <p:commandButton value="Cancel"
                            action="#{typeUtilisateurBean.init}"
                            oncomplete="PF('popAddTypeUtilisateur').hide();" />
                    </h:form>
                </p:outputPanel>
            </p:dialog>
        </ui:insert>
    </ui:define>
</ui:composition>

2 个答案:

答案 0 :(得分:0)

这里我们使用primefaces示例: 重要的是:

    此代码集中的
  • editable="true"
  • p:ajax event="rowEdit"p:ajax event="rowEditCancel"两个听众
  • f:facet name="output"f:facet name="input"用于显示,
  • 使用p:rowEditor
  • 修改列

CODE .xhtml:

<p:dataTable id="cars1" var="car" value="#{dtEditView.cars1}" editable="true" style="margin-bottom:20px">
       <p:ajax event="rowEdit" listener="#{dtEditView.onRowEdit}" update=":form:msgs" />
       <p:ajax event="rowEditCancel" listener="#{dtEditView.onRowCancel}" update=":form:msgs" />

       <p:column headerText="Id">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{car.id}" /></f:facet>
               <f:facet name="input"><p:inputText id="modelInput" value="#{car.id}" style="width:100%"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Year">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{car.year}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{car.year}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Brand">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{car.brand}" /></f:facet>
               <f:facet name="input">
                   <h:selectOneMenu value="#{car.brand}" style="width:100%">
                       <f:selectItems value="#{dtEditView.brands}" var="man" itemLabel="#{man}" itemValue="#{man}" />
                   </h:selectOneMenu>
               </f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Color">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{car.color}" /></f:facet>
               <f:facet name="input">
                   <h:selectOneMenu value="#{car.color}" style="width:100%">
                       <f:selectItems value="#{dtEditView.colors}" var="color" itemLabel="#{color}" itemValue="#{color}" />
                   </h:selectOneMenu>
               </f:facet>
           </p:cellEditor>
       </p:column>

       <p:column style="width:32px">
           <p:rowEditor />
       </p:column>
</p:dataTable>

答案 1 :(得分:0)

在我的表中我有一个名为actions的列,其中包含两个图标,一个用于更新行,另一个用于删除行。我喜欢这样工作。我还输入文本以过滤我的表格及其work.but如果函数PF(&#39; carsTable&#39;)。filter()被调用,我无法选择正确的行!

IistUsers.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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="../template/template.xhtml">

    <ui:define name="container clearfix">

        <ui:insert>

            <h:form id="Type_Utilisateur_Form">

                <p:commandLink action="#{typeUtilisateurBean.create()}"
                    oncomplete="PF('popAddTypeUtilisateur').show();"
                    style="font-size: 15px;">
                        Add user type                       
                    </p:commandLink>

                <p:outputPanel id="Type_Utilisateur_List" rendered="true">

                    <p:dataTable var="typeUtilisateur"
                        value="#{typeUtilisateurBean.listTypeUtilisateur}"
                        widgetVar="Type_Utilisateur_Table" rows="3" paginator="true"
                        rendered="true" emptyMessage="No records found with given criteria"
                        filteredValue="#{typeUtilisateurBean.filteredTypeUtilisateur}"
                        id="Type_Utilisateur_Table"
                        >

                        <f:facet name="header">
                            <p:outputPanel autoUpdate="true">
                                <p:inputText id="globalFilter"
                                    onkeyup="PF('Type_Utilisateur_Table').filter()"
                                    style="width:150px" placeholder="Search fields" />
                            </p:outputPanel>
                        </f:facet>

                        <p:column headerText="User Type designation"
                            sortBy="#{typeUtilisateur.designationTypeUtilisateur}"
                            filterBy="#{typeUtilisateur.designationTypeUtilisateur}"
                            filterStyle="display:none" filterMatchMode="contains">
                            <h:outputText
                                value="#{typeUtilisateur.designationTypeUtilisateur}" />
                        </p:column>
                        <p:column headerText="Actions" style="width:120px">
                            <p:outputPanel>

                                <p:commandLink action="#{typeUtilisateurBean.getRow()}"
                                    oncomplete="PF('popEditTypeUtilisateur').show();" 

                                    >
                                    <p:graphicImage value="../template/images/file_edit.png"
                                        width="48" height="48"></p:graphicImage>
                                </p:commandLink>

                                <p:commandLink action="#{typeUtilisateurBean.delete}"
                                    update=":Type_Utilisateur_Form:Type_Utilisateur_List"
                                    style="float: right;">
                                    <p:graphicImage value="../template/images/file_delete.png"
                                        width="48" height="48"></p:graphicImage>
                                </p:commandLink>


                            </p:outputPanel>
                        </p:column>
                    </p:dataTable>
                </p:outputPanel>
            </h:form>

            <p:dialog widgetVar="popEditTypeUtilisateur" modal="true"
                header="EDIT">
                <p:ajax event="close"
                    update=":Type_Utilisateur_Form:Type_Utilisateur_List" />
                <p:outputPanel autoUpdate="true">
                    <h:form>
                        <p:panelGrid columns="2" layout="grid">

                            <h:outputLabel value="User Type designation :" />
                            <p:inputText id="designationTypeUtilisateur"
                                value="#{typeUtilisateurBean.typeUtilisateur.designationTypeUtilisateur}" />

                        </p:panelGrid>
                        <p:commandButton value="Save" action="#{typeUtilisateurBean.save}"
                            oncomplete="if (!args.validationFailed) PF('popEditTypeUtilisateur').hide();" />
                        <p:commandButton value="Cancel"
                            action="#{typeUtilisateurBean.init}"
                            oncomplete="PF('popEditTypeUtilisateur').hide();" />
                    </h:form>
                </p:outputPanel>
            </p:dialog>


            <p:dialog widgetVar="popAddTypeUtilisateur" modal="true" header="Add">
                <p:ajax event="close"
                    update=":Type_Utilisateur_Form:Type_Utilisateur_List" />
                <p:outputPanel autoUpdate="true">
                    <h:form>
                        <p:panelGrid columns="2" layout="grid">


                            <h:outputLabel value=" User
                            Type designation :" />
                            <p:inputText id="designationTypeUtilisateur"
                                value="#{typeUtilisateurBean.typeUtilisateur.designationTypeUtilisateur}" />

                        </p:panelGrid>
                        <p:commandButton value="Save" action="#{typeUtilisateurBean.save}"
                            oncomplete="if (!args.validationFailed) PF('popAddTypeUtilisateur').hide();" />
                        <p:commandButton value="Cancel"
                            action="#{typeUtilisateurBean.init}"
                            oncomplete="PF('popAddTypeUtilisateur').hide();" />
                    </h:form>
                </p:outputPanel>
            </p:dialog>
        </ui:insert>
    </ui:define>
</ui:composition>

TypeUtilisateurBean:

package tn.com.bj.presentation;

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

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import tn.com.bj.entities.TypeUtilisateur;
import tn.com.bj.service.ITypeUtilisateurService;

@Controller("typeUtilisateurBean")
@Scope("session")
@ViewScoped
public class TypeUtilisateurBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Autowired
    @Qualifier("typeutilisateurService")
    private ITypeUtilisateurService typeUtilisateurService;

    private TypeUtilisateur typeUtilisateur = new TypeUtilisateur();
    private ListDataModel listTypeUtilisateur;
    private List<TypeUtilisateur> filteredTypeUtilisateur;

    @PostConstruct
    public void init() {
        listTypeUtilisateur = new ListDataModel();
        listTypeUtilisateur.setWrappedData(typeUtilisateurService
                .findAll(TypeUtilisateur.class));

    }

    public void create() {
        typeUtilisateur = new TypeUtilisateur();
    }

    public void getRow() {
        typeUtilisateur = (TypeUtilisateur) listTypeUtilisateur.getRowData();
    }

    public void delete() {
        getRow();
        typeUtilisateurService.deleteService(typeUtilisateur);
        listTypeUtilisateur.setWrappedData(typeUtilisateurService
                .findAll(TypeUtilisateur.class));
    }

    public void save() {
        typeUtilisateur = typeUtilisateurService
                .saveOrUpdateService(typeUtilisateur);
        init();
    }

    public ITypeUtilisateurService getTypeUtilisateurService() {
        return typeUtilisateurService;
    }

    public void setTypeUtilisateurService(
            ITypeUtilisateurService typeUtilisateurService) {
        this.typeUtilisateurService = typeUtilisateurService;
    }

    public TypeUtilisateur getTypeUtilisateur() {
        return typeUtilisateur;
    }

    public void setTypeUtilisateur(TypeUtilisateur typeUtilisateur) {
        this.typeUtilisateur = typeUtilisateur;
    }

    public ListDataModel getListTypeUtilisateur() {
        return listTypeUtilisateur;
    }

    public void setListTypeUtilisateur(ListDataModel listTypeUtilisateur) {
        this.listTypeUtilisateur = listTypeUtilisateur;
    }

    public List<TypeUtilisateur> getFilteredTypeUtilisateur() {
        return filteredTypeUtilisateur;
    }

    public void setFilteredTypeUtilisateur(
            List<TypeUtilisateur> filteredTypeUtilisateur) {
        this.filteredTypeUtilisateur = filteredTypeUtilisateur;
    }

}