我正在尝试在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>
当我从commandButton
移出dataTable
时,action
成功执行。 commandButton
在数据表中时有什么问题? commandLink
有同样的问题。
答案 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();
}
// ...
}