commandButton中的方法editBook()没有被调用,我无法理解为什么。主要问题是在模态对话框中进行dataTable的编辑。任何帮助都会很棒。这是我的代码。
index.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Hello from Facelets
<h:form id="form">
<p:dataTable id="table" var="book" value="#{booksManager.booksTable.booksList}" paginator="true" rows="10"
rowKey="#{book.bookId}" selectionMode="single" dblClickSelect="true" selection="#{booksManager.selectedBook}">
<p:ajax event="rowSelect"
update=":form:display"
oncomplete="dialog:bookDialog.show()"
listener="#{booksManager.prepareEdit()}"/>
<p:column headerText="Autor">
<h:outputText value="#{book.author}" />
</p:column>
<p:column headerText="Tytuł">
<h:outputText value="#{book.title}" />
</p:column>
<p:column headerText="Data publikacji">
<h:outputText value="#{book.publishingDate}" />
</p:column>
</p:dataTable>
<h:outputText value="#{booksManager.editedBooks}" />
<p:dialog id="dialog"
header="Book Detail"
widgetVar="bookDialog"
resizable="false"
showEffect="fade" hideEffect="explode" modal="true">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Autor:" />
<p:inputText id="AuthorEdit"
value="#{booksManager.selectedBook.author}" />
<h:outputText value="Tytuł:" />
<p:inputText id="TitleEdit"
value="#{booksManager.selectedBook.title}" />
<h:outputText value="Data publikacji:" />
<p:inputText id="DateEdit"
value="#{booksManager.selectedBook.publishingDate}" />
<p:commandButton
process="display"
actionListener="#{booksManager.editBook()}"
value="Save"
update=":form:table :form:dialog"
oncomplete="dialog:bookDialog.hide()"/>
</h:panelGrid>
</p:dialog>
</h:form>
<h:form>
<h:outputLabel value="E:" />
<h:inputText value="#{booksManager.count}" />
<h:commandButton value="P" action="#{booksManager.generateBooks()}" />
</h:form>
</h:body>
</html>
我做错了什么?
修改
editBook:
public void editBook(ActionEvent e) {
System.out.println("is in");
selectedBook.setBookId(this.selectedBookBefEdit.getBookId());
selectedBook.setTitle(this.selectedBookBefEdit.getTitle());
selectedBook.setAuthor(this.selectedBookBefEdit.getAuthor());
selectedBook.setPublishingDate(this.selectedBookBefEdit.getPublishingDate());
editedBooks++;
System.out.println(editedBooks);
}
的index.xhtml:
<p:commandButton
process="display"
actionListener="#{booksManager.editBook(e)}"
value="Save"
update=":form:table :form:dialog"
oncomplete="dialog:bookDialog.hide()"/>
仍然无效。将事件传递给方法editBook()?
可能有问题答案 0 :(得分:3)
确保在方法中使用以下包:
javax.faces.event.ActionEvent
如果仍然无法正常工作 请看这里,commandButton/commandLink/ajax action/listener method not invoked or input value not updated
答案 1 :(得分:2)
您的actionListener
EL表达式与方法签名与ActionEvent
参数不匹配。如果您打算让JSF设置并传递默认的ActionEvent
参数,那么您应该不使用表达式中的任何括号。
您最初的尝试
actionListener="#{booksManager.editBook()}"
和你的第二次尝试
actionListener="#{booksManager.editBook(e)}"
因此错误。正确的方法是
actionListener="#{booksManager.editBook}"