JSF Ajax onchange слушатель не обновляет таблицу автоматически - PullRequest
1 голос
/ 20 марта 2019

Итак, у меня есть страница JSF, которая должна автоматически изменять таблицу при изменении текста поля ввода.

<?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:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
     <title>Facelet Title</title>
    </h:head>
    <h:body>
     <h:form>
        <h:inputText value = "#{listBook.title}">
            <f:ajax event="keyup" render="myTable" execute="@this" />           
        </h:inputText>


        <table id="myTable">
            <ui:repeat var="b" value="#{listBook.foundBooks}" varStatus="status">
                <tr>
                    <td>#{b.id}</td>
                    <td>#{b.title}</td>
                    <td>#{b.author}</td>
                    <td>#{b.price}</td>
                    <td>#{b}</td>
                </tr>
            </ui:repeat>
        </table>

        <h:commandButton value="Back" action="index" ></h:commandButton>

    <div id="message">
        == #{listBook.message} ==
    </div>

    </h:form>

Соответствующий класс:

@ManagedBean(name = "listBook")
@RequestScoped
public class ListBook {

String title;
String message;
ArrayList<Book> foundBooks;

public ListBook() {
}

public String getBooks() throws SQLException {

    String retUrl = "ListBooks";
    try {
        Database db = Database.getInstance();
        foundBooks = db.getBookByTitle(title);

        message = foundBooks.isEmpty() ? "no books found" : "some books found";
    } catch (Exception ex) {
        message = "error happened: " + ex.getMessage();
        ex.printStackTrace();
    }

    return retUrl;
}

public String getTitle() {

    return title;
}

public void setTitle(String title) {
    this.title = title;
    System.out.println("yeah i am here");
    try {
        Database db = Database.getInstance();
        foundBooks = db.getBookByTitle(title);

        message = foundBooks.isEmpty() ? "no books found" : "some books found";
    } catch (Exception ex) {
        message = "error happened: " + ex.getMessage();
        ex.printStackTrace();
    }
}

public String getMessage() {

    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public ArrayList<Book> getFoundBooks() {
    return foundBooks;
}

public void setFoundBooks(ArrayList<Book> foundBooks) {
    this.foundBooks = foundBooks;
}  
}

Поэтому у меня проблема в том, что таблица не обновляется, когда я изменяю текст текстового поля.Несмотря на то, что вызывается функция setTitle и меняется массив, таблица и сообщение не меняются.

...