jsf - :commandButton not working inside h:dataTable

标签 jsf jsf-2 datatable commandbutton commandlink

我试图通过dataTable内的commandButton执行action,但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 也有同样的问题。

最佳答案

当处理表单提交的 HTTP 请求期间 #{bean.list} 后面的列表与处理表单提交期间的列表完全相同时,就会出现此问题。显示表单的请求。 JSF 将重新遍历该列表以找到按下的按钮并调用其操作。

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

最好的解决办法是将 bean 放入 View 范围中,并确保以正确的方式加载数据模型。

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Item> list;

    @EJB
    private ItemService service;

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

    // ...
}

另请参阅:

关于jsf - :commandButton not working inside h:dataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034428/

相关文章:

java - 在 JSF 2.0 中使用带有验证的 selectOneMenu

java - 不调用jsf中的setter方法

jsf-2 - 在 JSF 中添加人脸消息时,我的操作未执行?

r - 根据 R 中的某些条件计算值?

jsf - PrimeFaces 数据表 : How to receive selected rows values?

c# - DataTable importRow() 到空表

jsf - 字形图标无法正确显示

jsf - 通常验证失败时 JSF 中的条件样式

jsf - 将值从页面传递到其他页面 JSF

java - RichFaces:使用两个 modalPanel