Ajax不更新过滤后的数据表

Ajax不更新过滤后的数据表,ajax,jsf-2,primefaces,datatable,Ajax,Jsf 2,Primefaces,Datatable,我正在讨论这个问题,ajax不是从过滤数据表更新的。Primefaces版本是5.2JSF2.2 我正在使用selectEvent,它在对话框中显示行的详细信息。这个很好用。但是当我过滤数据表,然后尝试进行选择时,它不起作用。我尝试了下面的链接,但没有成功。 代码是 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht

我正在讨论这个问题,ajax不是从过滤数据表更新的。Primefaces版本是5.2JSF2.2 我正在使用selectEvent,它在对话框中显示行的详细信息。这个很好用。但是当我过滤数据表,然后尝试进行选择时,它不起作用。我尝试了下面的链接,但没有成功。

代码是

<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:o="http://omnifaces.org/ui">

    <ui:composition template="/template.xhtml">
        <ui:define name="title">
            <h:outputText value="#{bundle.ListUtensilsTitle}"></h:outputText>
        </ui:define>
        <ui:define name="body">
            <h:form id="BookView1Form" >
                <p:messages id="messages" showSummary="true"  globalOnly="false"
                            showDetail="true" autoUpdate="true" closable="true" />
                <p:dataTable  value="#{bookingController.itemsBook}" var="book"
                             id="bookDetDT" widgetVar="bookDetTable"
                             tableStyle="width:auto"
                             style="word-wrap: break-word; padding-left: 15px;"
                             rows="10"
                             paginator="true"
                             paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                             rowsPerPageTemplate="5,10,20,30,40,50"
                             rowKey="#{book.bookingId}"
                             selectionMode="single" selection="#{bookingController.selectedBook}"
                             >
                    <p:ajax event="rowSelect"  listener="#{bookingController.onRowSelected}" 
                            update=":ViewDetForm bookDetDT"  oncomplete="PF('bookDetTable').filter();"/>
                        <p:ajax event="rowUnselect" />
                        <p:column filterBy="#{book.bookingId}" filterMatchMode="contains">
                        <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_bookingId}"/>
                        </f:facet>
                        <h:outputText value="#{book.bookingId}"/>
                    </p:column>
                    <p:column >
                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_guestId}"/>
                            </f:facet>
                            <h:outputText value="#{book.guestId}"/>
                    </p:column>


                    <p:column >
                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_bookingDate}"/>
                            </f:facet>
                            <h:outputText value="#{book.bookingDate}">
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </h:outputText>
                    </p:column>
                        <p:column >

                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_timeSlotId}"/>
                            </f:facet>

                            <h:outputText value="#{book.timeSlotId.toString()}"/>
                        </p:column>
                    <p:column>
                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_totalCharges}"/>
                            </f:facet>
                            <h:outputText value="#{book.totalCharges}"/>
                    </p:column>
                        <p:column >
                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_bookingStatus}"/>
                            </f:facet>

                            <h:outputText value="#{book.bookingStatus}"/>
                    </p:column>
                        <p:column width="100">
                            <f:facet name="header">
                                <h:outputText value="#{bundle.ListBookingDetailsTitle_paymentId}"/>
                            </f:facet>
                        <h:outputText 
                            value="#{book.paymentId.paymentMode} #{book.paymentId.paymentDate} #{book.paymentId.paymentDetails}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Details"/>
                        </f:facet>

                        <p:dataTable value="#{book.itemsHalls}" var="halls" tableStyle="width:auto" >
                            <p:column >
                                <h:outputText value="#{halls.hallName}"/>
                            </p:column>
                            <p:column >
                                <h:outputText value="#{halls.venueId.venueName}"/>
                            </p:column>
                        </p:dataTable>
                    </p:column>
                  </p:dataTable>
          </h:form>
  <ui:include src="ViewBookingDetails.xhtml"/>
             </ui:define>
        </ui:composition>
    </html>

支持bean是

@ManagedBean(name = "bookingController")
@SessionScoped
public class BookingController implements Serializable {




    public List<BookingBean> getItemsBook() {
        itemsBook = new ArrayList<BookingBean>();
        itemsBookDet=ejbFacadeBookDet.findAll();

        for(BookingDetails bookTemp : itemsBookDet) {
            BookingBean selectedBookTemp = new BookingBean();
            selectedBookTemp.setBookingId(bookTemp.getBookingId());
            selectedBookTemp.setBookingDate(bookTemp.getBookingDate());
            selectedBookTemp.setTotalCharges(bookTemp.getTotalCharges());
            selectedBookTemp.setBookingStatus(bookTemp.getBookingStatus());
            selectedBookTemp.setBookingDesc(bookTemp.getBookingDesc());
            selectedBookTemp.setGuestId(bookTemp.getGuestId());
            selectedBookTemp.setPaymentId(bookTemp.getPaymentId());
            selectedBookTemp.setTimeSlotId(bookTemp.getTimeSlotId());
            itemsBook.add(selectedBookTemp);
        }


        for(BookingBean bk : itemsBook) {
            bk.setItemsHalls(ejbFacadeHB.findHallsListBookedForBookingID(bk.getBookingId()));
        }

        for(BookingBean bk : itemsBook) {
            if(bk.getBookingStatus().equals("CHECKOUT")) {

                bk.setItemsRefund(ejbFacadeBRF.findBookingRefundByBookID(bk.getBookingId()));
                //bk.getItemsRefund().setRefundUtensilsList(ejbFacadeBRF.findUtensilsList(bk.getItemsRefund().getRefundId()));
            }

        }



        //selectedBookDet = new BookingDetails();
        return itemsBook;
    }







    public String prepareView1() {
        selectedBookDet = null;
        selectedBook = new BookingBean();
        return "/booking/View1?faces-redirect=true";
    }

    public void onRowSelected(SelectEvent event) {

        selectedBook = (BookingBean)event.getObject();
        System.out.println(selectedBook.getBookingId());
        fakelist=new ArrayList<Integer>();
        fakelist.add(1);
        System.out.println("selectedBook = "+selectedBook.getBookingId());
        if(((BookingBean)event.getObject()).getBookingStatus().equals("CONFIRMED")) {
            selectedBookDet = ejbFacadeBookDet.find(((BookingBean)event.getObject()).getBookingId());
        } 

        /*
        FacesContext facesContext = FacesContext.getCurrentInstance();
        DataTable table;
        table = (DataTable)JsfUtil.findComponent(facesContext.getViewRoot(), "bookDetDT");
        table.resetValue();
        System.out.println(table.getClientId()+"sdgssfhdfh");
        table.reset();
        */
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("PF('viewBKDDialog').show();");


    }




    public void cancelBook(){

        switch(selectedBookDet.getBookingStatus()) {

            case "CONFIRMED" :

                selectedBookDet.setBookingStatus("CANCELLED");
                ejbFacadeBookDet.edit(selectedBookDet);
                itemsHB = ejbFacadeHB.findHallsBookedForBookingID(selectedBookDet.getBookingId());
                for(HallsBooked hallsBookedTemp : itemsHB) {

                    hallsBookedTemp.setHallsBookedDesc("CANCELLED");
                    ejbFacadeHB.edit(hallsBookedTemp);
                }

                JsfUtil.addSuccessMessage("Booking ID "+selectedBookDet.getBookingId()+" has been cancelled");
                itemsBook = null;
                selectedBookDet = null;
                break;

        }
    }

    private List<Integer> fakelist=null;

    public List<Integer> getFakelist() {
        return fakelist;
    }
}
@ManagedBean(name=“bookingController”)
@会议范围
公共类BookingController实现可序列化{
公共列表getItemsBook(){
itemsBook=新的ArrayList();
itemsBookDet=ejbFacadeBookDet.findAll();
对于(BookingDetails bookTemp:ItemsBookSet){
BookingBean selectedBookTemp=新建BookingBean();
选择bookTemp.setBookingId(bookTemp.getBookingId());
选择bookTemp.setBookingDate(bookTemp.getBookingDate());
选择bookTemp.setTotalCharges(bookTemp.getTotalCharges());
已选择bookTemp.setBookingStatus(bookTemp.getBookingStatus());
选择bookTemp.setBookingDesc(bookTemp.getBookingDesc());
选择bookTemp.setGuestId(bookTemp.getGuestId());
选择bookTemp.setPaymentId(bookTemp.getPaymentId());
selectedBookTemp.setTimeSlotId(bookTemp.getTimeSlotId());
itemsBook.add(selectedBookTemp);
}
用于(BookingBean bk:itemsBook){
bk.setItemsHalls(ejbFacadeHB.findhalls为bookingId(bk.getBookingId())而被booked);
}
用于(BookingBean bk:itemsBook){
如果(bk.getBookingStatus().equals(“签出”)){
bk.setItemsRefund(ejbFacadeBRF.findbookingReturnByBookId(bk.getBookingId());
//bk.getItemsRefund().setReturneUninstList(ejbfacaderf.findUtensilsList(bk.getItemsRefund().getReturnId());
}
}
//selectedBookDet=新建BookingDetails();
归还物品手册;
}
公共字符串prepareView1(){
selectedBookDet=null;
selectedBook=newbookingbean();
返回“/booking/View1?faces redirect=true”;
}
选定行上的公共无效(选择事件){
selectedBook=(BookingBean)事件。getObject();
System.out.println(selectedBook.getBookingId());
fakelist=newarraylist();
增加(1);
System.out.println(“selectedBook=“+selectedBook.getBookingId());
如果(((BookingBean)event.getObject()).getBookingStatus()等于(“已确认”)){
selectedBookDet=ejbFacadeBookDet.find(((BookingBean)event.getObject()).getBookingId());
} 
/*
FacesContext FacesContext=FacesContext.getCurrentInstance();
数据表;
table=(DataTable)JsfUtil.findComponent(facesContext.getViewRoot(),“bookdett”);
table.resetValue();
System.out.println(table.getClientId()+“sdgssfhdfh”);
table.reset();
*/
RequestContext=RequestContext.getCurrentInstance();
execute(“PF('viewbkdilog').show();”;
}
公共书籍(){
开关(selectedBookDet.getBookingStatus()){
“确诊”病例:
已选择BookDet.setBookingStatus(“已取消”);
ejbFacadeBookDet.edit(selectedBookDet);
itemsHB=ejbfacadeb.findHallsBookedForBookingID(selectedBookDet.getBookingId());
用于(HallsBooked Hallsbookedttemp:itemsHB){
Hallsbookedttemp.setHallsBookedDesc(“取消”);
ejbfacadeb.edit(hallsBookedTemp);
}
JsfUtil.addSuccessMessage(“预订ID”+selectedBookDet.getBookingId()+“已被取消”);
itemsBook=null;
selectedBookDet=null;
打破
}
}
私有列表fakelist=null;
公共列表getFakelist(){
回归fakelist;
}
}

任何人..请帮助我..

为什么要使用filter()方法?选择“否”时,您正在发送以筛选表。我想我可能把你弄糊涂了。这个数据表有两个特性。一种是行选择,它使用ajax打开一个对话框,显示行a的详细信息