簡體   English   中英

在primefaces數據表中選擇“行”

[英]Select Row in primefaces data table

我有這張桌子:

在此處輸入圖片說明

<h:form>
    <p:dataTable id="books" value="#{ordersBean.userOrders}" var="book" selection="#{ordersBean.selectedBook}">
        <p:column>
            <f:facet name="header">Order ID</f:facet>
            <h:outputText value="#{book[0]}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Title</f:facet>
            <h:outputText value="#{book[1]}"/>
        </p:column>
        <p:column>
            <f:facet name="header"></f:facet>
            <p:commandButton id="selectRowBtn" value="select" action="#{ordersBean.showSelectedBook}"/>
        </p:column>
    </p:dataTable>
</h:form>

我想要當我單擊每個select按鈕時,它是分配給selectedBook屬性的行信息,並在showSelectedBook()方法中顯示它:

這是ordersBean

private Book selectedBook = new Book();

public Book getSelectedBook() {
    return selectedBook;
}

public void setSelectedBook(Book selectedBook) {
    this.selectedBook = selectedBook;
}

public void showSelectedBook() {
    System.out.println("In selected Book(), book: " + getSelectedBook());
}

但是結果是這樣的:

In selected Book(), book: null

應該是這樣的:

XML代碼:

<p:commandButton id="selectRowBtn" value="select" 
    action="#{ordersBean.showSelectedBook}">
    <f:param name="bookId" value="#{book[0]}" />
</p:commandButton>

Java bean方法:

public void showSelectedBook() {

    Map<String,String> params = 
        FacesContext.getExternalContext().getRequestParameterMap();

    int bookId = Integer.valueOf(params.get("bookId"));

    for(Book book : bookList){
        if(book.bookId == bookId){
            selectedBook = book;
            break;
        }
    }

    System.out.println("In selected Book(), book: " + getSelectedBook());
}

此外,您必須了解有關將參數發送到操作的模式的知識,請參見下面的鏈接。 http://www.mkyong.com/jsf2/4-ways-to-pass-parameter-from-jsf-page-to-backing-bean/

如果要顯示所選的書,則必須設置selectionMode="single"而無需在每行中放置一個commandButton ,只需在頁腳小平面中僅指定一個commandButton ,如下所示:

<f:facet name="footer">
        <p:commandButton id="selectRowBtn" value="select" action="#{ordersBean.showSelectedBook}"/>
    </f:facet>

在這里,你的主要問題是,要設置一個new Book()到您的selectedBook變量,所以一個null值,你selectedBook ,此聲明:

private Book selectedBook = new Book();

應該 :

private Book selectedBook;

您不必在selectedBook實例化new Book()

看一下此Showcase中的第二個Example,看看它是如何工作的。

更好的解決方案,並且沒有選擇按鈕:

xml代碼:

<p:dataTable id="ListBook"
    value="#{ordersBean.bookList}"
    selection="#{ordersBean.selectedBook}" var="book"
    rowKey="#{book.id}" selectionMode="single">

    <p:ajax event="rowSelect"
        listener="#{ordersBean.onRowSelectDataTable()}"
                                    update="ListBook" />
  ..... <columns> ..
</p:datatable>

Java Bean:

private Book selectedBook=new Book();
private boolean headerButtonsDisabled=true;
//add a List object for all books (bookList) with getter and setter


public boolean isHeaderButtonsDisabled() {
        return headerButtonsDisabled;
    }

public void setHeaderButtonsDisabled(boolean headerButtonsDisabled) {
    this.headerButtonsDisabled = headerButtonsDisabled;
}

public void onRowSelectDataTable() {
    this.setHeaderButtonsDisabled(false);
}

public Book getSelectedBook() {
        return selectedBook;
    }

public void setSelectedBook(Book selectedBook) {
    this.selectedBook = selectedBook;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM