如何在jsf中创建新的对象实例?

时间:2016-11-25 16:10:02

标签: jsf jsf-2 xhtml

我想在我的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)titleauthor的对象。

<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"都具有相同的值。

0 个答案:

没有答案