【问题标题】:InputText value null when disabled is true [duplicate]禁用时 InputText 值 null 为 true [重复]
【发布时间】:2011-08-07 08:16:06
【问题描述】:

我的 JSF 页面上有一个 inputText,并且附加了一个 JavaScript 日历弹出窗口。 有条件地,我将 inputText disabled 属性设置为 true 和 false。

当我设置disabled = true 并将JSF 值写入数据库时​​,inputText 中的值为空。我相信这是由于disabled = true

即使disabled = true,有没有办法保留inputText框中的值?

我正在使用 JSF 1.1。

【问题讨论】:

  • 在 jsf 中创建一个隐藏的 inputText 附加一些值,并使用 javascript 获取禁用的 inputText 的值并将其提供给隐藏的 inputText。

标签: java jsf


【解决方案1】:

另一种解决方法是在提交表单时暂时启用此输入,并在模型更新后再次禁用它。还有一些使用具有相同 id 的隐藏输入的解决方案,但不幸的是我不记得它是如何工作的。

【讨论】:

    【解决方案2】:

    您应该尝试使用 readonly=true 而不是 disabled=true(就像在纯 HTML 中一样)

    【讨论】:

    • 如果我将 readonly 设为 true,那么用户可以从日历弹出窗口中选择 inputText 字段中的日期值。
    • 也许你应该澄清你想禁用什么,什么不应该禁用......
    • 基于一个条件,我想禁用 inputText。 InputText 附有一个弹出日历供用户选择日期。如果我将 inputText 设为只读,则用户可以从弹出日历中选择日期。理想情况下,我希望用户不要对 inputText 进行任何更改。就像你提到的 disabled 会使值在 jsf 页面中为 null。
    • 这样,HTML 确实会将值发送到服务器,但 JSF 仍然不会在模型中设置值。所以这个答案对于当前形式的问题是无效的。
    • 设置 readonly=true 也会产生与我在工作中发现的相同的问题
    【解决方案3】:

    浏览器正在关注HTML 4.0.1 spec:

    一个成功的控件对于提交来说是“有效的”。

    ...省略的文本...

    禁用的表单控件不会作为表单的一部分提交。

    作为一项额外的安全措施,如果 JSF 组件 renderer 找到 isDisabled() == true,则不应处理 Apply Request Values 阶段中​​的值。

    来自HTML render kit doc

    如果渲染器选择实现解码行为,它必须参考要渲染的组件的“禁用”和“只读”属性,如果任一属性的值等于,忽略大小写,字符串“true”(没有引号)解码方法必须不采取任何行动并立即返回。

    由于应用请求值阶段首先运行,因此对这些布尔值的评估不会受到表单提交中的任何内容的影响(除非您将它们绑定到#{param.foo} 表达式 - 请注意任何安全注意事项)。

    您的表单设计和提交策略必须考虑到这些限制。

    【讨论】:

      【解决方案4】:

      当您设置 disabled = truereadonly = true 时,JSF 机制不会发送(或处理)这些值。这就是你在数据库中写入空值的原因。

      作为一种解决方案,您必须将值存储在变量中,并将其显示在 inputText 中,属性为 disabled = true

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 2015-12-19
        相关资源
        最近更新 更多