清除JSF数据表中的InputText的问题

时间:2010-02-23 00:46:19

标签: jsf binding datatable reset

我正在尝试使用取消按钮重置数据表内的一些输入文本字段。我遇到的问题是,如果我尝试取消它,但有验证错误,它不允许我这样做,因为它首先进行验证,查找和错误,并在它可以重新渲染之前输出错误。

显而易见的解决方案是在按钮上设置“immediate = true”。这摆脱了问题,并允许我取消而无需验证但字段本身未设置为其原始值。这是因为组件本身永远不会从后备bean重新获取数据,因为立即设置为true。

本文对此进行了详细解释:http://wiki.apache.org/myfaces/ClearInputComponents

这篇文章提出了许多解决方案,但它们都不适用于我。

  • 我必须保持同一页面,因此不能选择更改视图。
  • 我无法重置页面上所有输入字段的值,因为我只想重置我取消的'行'
  • 我似乎无法将组件绑定到任何输入字段,因为它们在数据表中,输入字段本身的“绑定”属性不能引用“var”变量。例如,以下“绑定”属性是非法的,并给我一个错误:

    < ice:dataTable id =“poolSharesTbl”var =“node”value =“#{poolSharesManager.nodeModel}”......   <冰:柱>     < ice:inputText binding =“#{node.inputTextBinding}”...

这可能与'var'只是请求范围有关。

无论如何,有没有人对如何使这项工作有任何想法?

2 个答案:

答案 0 :(得分:4)

使用JSF这样做很痛苦。您几乎无法控制验证。您最好的选择是使用JavaScript重置值。这只是在几行(或一个jQuery的oneliner)完成,而不是数百到几百,你会采取这种方式来解决这个jsfish方式。

答案 1 :(得分:0)

无论如何,我最终使用的解决方法只需要大约50行代码,或多或少,手动执行验证并将inputtext值(默认情况下为Strings)转换为Integers。我以前把javascript和JSF(伍德斯托克图书馆)混在一起很糟糕,所以我很害怕把它再次引入环境;)