迭代h:commandButton中的action of action方法失败

时间:2014-03-10 17:13:57

标签: java jsf jsf-2.2

我正在尝试实现一个将书籍添加到购物车的功能。

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>

来自视图index.jsf的请求,action方法调用视图cart.jsf。

问题是:没有调用action方法,甚至没有构造bean本身。 我看过类似问题的解决方案,但找不到指向正确方向的解决方案。起初我以为#{search.bookList}可能是一个问题,但我不需要bookList用于下一个视图。

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

  

java.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>

search bean是bookList的来源。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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