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

Raj*_*pta 5 datatable jsf commandlink jsf-2 commandbutton

我试图执行一个action通过commandButton内部的dataTable,但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>
Run Code Online (Sandbox Code Playgroud)

当我commandButton移出时dataTable,action成功执行.数据表内部有什么问题commandButton?该commandLink有同样的问题.

Bal*_*usC 15

当列表后面会发生这个问题#{bean.list}不是处理表单提交,因为它是显示形式的请求期间的HTTP请求时完全一样.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();
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: