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