5

我正在尝试在 a中执行actionthrough ,但是当将放在数据表中时不会调用 ,如下所示commandButtondataTableactioncommandButton

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

当我移出commandButtondataTableaction成功执行。commandButton在数据表内部时有什么问题?有同样的commandLink问题。

4

1 回答 1

15

当处理表单提交的 HTTP 请求和显示表单的请求过程中后面的列表不完全相同时,就会出现#{bean.list}问题。JSF 将重新遍历列表以定位按下的按钮并调用其操作。

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

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

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Item> list;

    @EJB
    private ItemService service;

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

    // ...
}

也可以看看:

于 2011-11-07T12:58:32.290 回答