【问题标题】:Problems with Clearing InputText in a JSF Datatable在 JSF 数据表中清除 InputText 的问题
【发布时间】:2011-01-19 21:37:15
【问题描述】:

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

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

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

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

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

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

不管怎样,有没有人对如何让它工作有任何想法?

【问题讨论】:

    标签: jsf binding datatable reset


    【解决方案1】:

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

    【讨论】:

    • 我不认为您可以使用 javascript 将值重置为原始值,例如,如果您像我正在做的那样,每个 inputText 字段都有 partialSubmit="true"。 javascript 重置可能只会将它们重置为最后一个绑定值……而不仅仅是它们的原始值。您可能必须让隐藏字段与每个输入字段一致,包含原始值,然后在重置时将隐藏值复制到输入字段中。对吗?
    • 那么您需要详细说明“重置”的含义。
    【解决方案2】:

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

    【讨论】:

    • 哦,伍德斯托克确实让 JSF 更加痛苦。祝你好运。
    猜你喜欢
    • 2013-02-06
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多