我正在尝试执行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
out of dataTable
, the action
已成功执行。什么时候出现问题commandButton
是在数据表里面吗?这commandLink
有同样的问题。
当列表落后时可能会发生此问题#{bean.list}
is not处理表单提交的 HTTP 请求期间与显示表单的请求期间完全相同。 JSF 将重新遍历该列表以找到按下的按钮并调用其操作。
如果 bean 是请求范围的并且列表在 bean 的(后)构造期间没有重新填充,或者列表的填充取决于在表单提交期间丢失的请求范围变量,则 JSF 将在处理时检索空列表或完全不同的列表表单提交,因此无法找到按下的按钮,也不会调用任何操作。
最好的解决方法是将 bean 放入视图范围中,并确保以正确的方式加载数据模型。
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
private List<Item> list;
@EJB
private ItemService service;
@PostConstruct
public void init() {
list = service.list();
}
// ...
}
也可以看看:
-
commandButton/commandLink/ajax 操作/侦听器方法未调用或输入值未更新 https://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked- 第 4 点
- 的优点和缺点@ViewScoped http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)