gpt4 book ai didi

jsf - :commandButton not working inside h:dataTable

转载 作者:行者123 更新时间:2023-12-02 14:10:21 25 4
gpt4 key购买 nike

我试图通过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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com