http://forhope.iteye.com/blog/859714
<a4j:keepAlive beanName="***Action" ajaxOnly="true"/>
此时把h:commandLink替换成a4j:commandLink即可
Java代码
由于jsf的重构组件时保持状态的原理,造成commandlink未提交。
解决办法:在页面中加入:
<t:saveState value="#{后台bean名.datatable的list名}"/>
或者把后台bean名的范围改为session
<a4j:keepAlive beanName="***Action" ajaxOnly="true"/>
此时把h:commandLink替换成a4j:commandLink即可
或者在web.xml把javax.faces.STATE_SAVING_METHOD设置为client
由于jsf的重构组件时保持状态的原理,造成commandlink未提交。
解决办法:在页面中加入:
<t:saveState value="#{后台bean名.datatable的list名}"/>
或者把后台bean名的范围改为session
<a4j:keepAlive beanName="***Action" ajaxOnly="true"/>
此时把h:commandLink替换成a4j:commandLink即可
或者在web.xml把javax.faces.STATE_SAVING_METHOD设置为client
参考:dataTables的Action listener和action命令没有被调用?
如果action源(h:commandLink,h:commandButton)没有被提供,那么Action Listeners和actions就不会被激活。当action源在dataTable上时,并且dataTable的value属性指向一个请求范围的数据源,那么action源在接下来的请求中就没有被提供,例如:
Java代码
<h:dataTable value="#{requestScopedBean.dataModel.wrappedData}" />
<h:column>
<h:commandLink value="click here" action="#{backingBean.willNotFire}" />
</h:column>
</h:dataTable>
<h:dataTable value="#{requestScopedBean.dataModel.wrappedData}" />
<h:column>
<h:commandLink value="click here" action="#{backingBean.willNotFire}" />
</h:column>
</h:dataTable>
action源没有被rendered,是因为数据源在随后的请求中不存在了(在第一次响应完成后,被垃圾回收器进行了回收)。
为了解决这个问题,使用t:saveState标记或者将request范围的bean放在session范围内:
Java代码
<t:saveState value="#{myRequestScopedBean.dataModel.wrappedData}" />
本文介绍了解决 JSF 中 CommandLink 无法正确提交的问题。通过使用 a4j:commandLink 替换 h:commandLink 或在页面中加入 t:saveState 标记等方式,确保了即使在组件重构时也能保持状态并成功提交。
223

被折叠的 条评论
为什么被折叠?



