h:commandButton在h:dataTable中不起作用

时间:2011-11-07 08:58:16

标签: jsf jsf-2 datatable commandbutton commandlink

我正在尝试在action内执行commandButtondataTable,但是当action放在数据表中时,commandButton不会被调用如下图所示

<h:form>
    <h:dataTable value="#{bean.list}" var="item">
        <h:column>
            <h:commandButton value="submit" action="#{bean.submit}" />
        </h:column>
    </h:dataTable>
</h:form>

当我从commandButton移出dataTable时,action成功执行。 commandButton在数据表中时有什么问题? commandLink有同样的问题。

1 个答案:

答案 0 :(得分:14)

当处理表单提交的HTTP请求期间#{bean.list}后面的列表 完全相同时,可能会发生此问题,就像在显示表单请求期间一样。 JSF将重新遍历列表以找到按下的按钮并调用其动作。

如果bean是请求范围的并且在bean(post)构造期间没有重新填充列表,或者列表的填充依赖于在表单提交期间丢失的请求范围变量,那么JSF将检索空的或完全不同的处理表单提交时列表,因此无法找到按下的按钮,也不会调用任何操作。

最好的解决方法是将bean放在视图范围内,并确保以正确的方式加载数据模型。

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Item> list;

    @EJB
    private ItemService service;

    @PostConstruct
    public void init() {
        list = service.list();
    }

    // ...
}

另见: