我想在我的jsf中创建一个新的实体实例,将输入值绑定到属性并将整个对象传递给方法。不幸的是,我无法创建实体的新实例或将值绑定到jsf中的属性。我创建了一个小例子来解释我的问题:
托管bean BookCatalogBean
是一种控制器,用作视图和模型之间的接口。方法getNewBook
创建了Book
的新实例。 jsf中的输入值应绑定到此对象。
@ManagedBean
@SessionScoped
public class BookCatalogBeanimplements Serializable {
private List<Book> availableBooks = new ArrayList<Book>();
public BookCatelogBean() {
this.availableBooks.add(new Book(0, "Title", "Author"));
}
public Book getNewBook() {
return new Book(this.getNewId());
}
public void add(Book book) {
}
public void update(Book book) {
}
public void delete(Book book) {
}
private long getNewId() {
return this.availableBooks.stream().max(Comparator.comparing(x -> x.getId())).get().getId() + 1;
}
}
在我看来,我想重用Book
的新实例,并将输入值绑定到对象的属性。我尝试使用<c:set />
创建一个新实例,但这不起作用。我的托管bean或方法bookCatelogBean.add
始终收到一个空(null)title
和author
的对象。
<h:form class="form">
<ul>
<li>
<span>
<!-- Create and use a new instance ob `Book` -->
<h:inputText value="#{newBook.title}" a:placeholder="Title"/>
<h:inputText value="#{newBook.author}" a:placeholder="Autor"/>
</span>
</li>
<li>
<span>
<h:commandButton value="Submit" action="#{bookCatelogBean.add(newBook)}"/>
</span>
</li>
</ul>
</h:form>
如何在我的jsf中创建Book
的新实例并将输入值绑定到它?我做错了什么?
我知道,我可以将实体Book
转换为具有请求范围的托管bean,以便为每个请求创建单个对象,但我需要在不同位置的每个请求有多个对象。如果我将Book
用于请求的范围,则每个var="book"
都具有相同的值。