4

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

显而易见的解决方案是在按钮上设置“immediate=true”。这消除了这个问题,并允许我在没有验证的情况下取消但字段本身未设置为其原始值。这是因为组件本身永远不会从支持 bean 重新获取数据,因为 immediate 设置为 true。

这在这篇文章中得到了很好的解释:http ://wiki.apache.org/myfaces/ClearInputComponents

这篇文章提出了许多解决方案,但没有一个对我有用。

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

    <ice:dataTable id="poolSharesTbl" var="node" value="#{poolSharesManager.nodeModel}" ... <ice:column> <ice:inputText binding="#{node.inputTextBinding}" ...

这可能与仅作为请求范围的“var”有关。

无论如何,有人对如何使它工作有任何想法吗?

4

2 回答 2

4

使用 JSF 这样做很痛苦。您对验证几乎没有控制权。最好的办法是使用 JavaScript 来重置这些值。它只用几行(或一个带有 jQ​​uery 的单行代码)完成,而不是几十到几百行,你可以用jsfish的方式来解决这个问题。

于 2010-02-23T11:40:52.740 回答
0

无论如何,我最终使用了一种解决方法,只需要大约 50 行代码,或多或少,手动进行验证并将 inputtext 值(默认为字符串)转换为整数。我之前有过将 javascript 与 JSF(伍德斯托克库)混合的糟糕经历,所以我害怕再次将它引入环境;)

于 2010-02-25T05:11:16.230 回答