从迭代h:commandButton调用动作方法失败



我正在尝试实现一个将书添加到购物车的函数。

Cart bean具有保存请求参数的字段。

<h:form id="addBookToCartForm">
    <ui:repeat var="book" value="#{search.bookList}">
        <h:commandButton value="#{messages.addToCart}" 
            action="#{cart.addBookToCart}">
            <f:param name="bookId" value="#{book.bookId}" />
        </h:commandButton>
    </ui:repeat>
</h:form>

视图索引的请求。Jsf,动作方法调用视图cart.jsf.

问题是:没有调用动作方法,甚至没有构造bean本身。我看了一下类似问题的解决方案,但找不到一个指向正确方向的解决方案。起初我想#{搜索。bookList}可能是一个问题,但是我不需要下一个视图的bookList。

通过<ui:debug>激活调试显示:

. lang。UnsupportedOperationException:不支持。javax.faces.component.UIViewAction.getActionListener (UIViewAction.java: 249)

此消息引用index.jsf顶部的元数据:

<f:metadata>
    <f:viewParam name="genreTypeId" value="#{search.genreTypeId}" />
    <f:viewAction action="#{search.searchByGenreTypeId}" />
</f:metadata>

搜索 bean是bookList的来源。

使用ajax更新消息。它将显示一些验证消息

事实证明,问题根本不是迭代,而是我的应用程序使用的操作方法的返回值。为了保持视图实例,方法必须返回null或void。

最新更新