【问题标题】:How to force setter's call for disabled fields in JSF 2.0 [duplicate]如何强制设置器调用 JSF 2.0 中的禁用字段 [重复]
【发布时间】:2013-03-26 06:08:10
【问题描述】:

在 JSF 中禁用/只读字段的设置器不会被调用,因此支持 bean 永远不会具有禁用字段的值,无论是复选框还是输入文本字段等。如果我需要禁用字段的值该怎么办映射到bean的字段?如何强制调用 setter 以便将值设置回来? 任何建议/帮助将不胜感激。

【问题讨论】:

  • 很抱歉我没有收到这个。能否请您详细说明一下。
  • @AlexandreLavoie 如何使用视图或会话范围绕过它,请提供更多详细信息?
  • @tt_emrah 这是因为在使用 RequestScoped 时,会创建 bean 以显示页面并在您提交(执行操作)时重新创建。如果要保留第一个值,可以使用 ViewScoped 或 SessionScoped,这样 bean 会在整个作用域内保持活动状态,因此会保留您设置的先例值。
  • @AlexandreLavoie 是的,我知道,感谢您提供详细信息。但这将如何使 jsf 禁用的字段提交到后端?
  • @tt_emrah,它不会,但你为什么要发送一个禁用的字段?无论如何,该值不应该改变,这就是您可以使用另一个范围并获得先例值的原因。如果您确实需要字段值,唯一的方法是通过 JavaScript 获取它,或者在提交之前启用该字段。

标签: jsf-2


【解决方案1】:

您可以使用 javascript 或 jQuery 禁用客户端的字段,而不是使用 JSF 的 disabled="true",例如使用 jQuery:

详情见此贴:How to disable an input with jQuery?

或者您可以将禁用的输入字段值作为隐藏字段与您的表单一起提交

<h:inputHidden value="#{myBean.myValue}" />

【讨论】:

  • 感谢马特的帮助。但是有没有其他方法可以处理这个问题。我认为如果我设法调用该领域的设置者应该没问题。那么有什么办法可以强制调用 setter 吗?
  • 如果您的表单中有任何操作方法(例如附加到任何其他启用的输入字段),您可以从这些操作方法中调用设置器。
  • 您不能提交已禁用的元素。当 JSF 确定是否应该处理它时,它认为处理它没有用,因为它被禁用并且它的值不应该改变。这可能是由于实际的ViewState 与 JSF 管理的之间存在差距。为什么你首先有一个禁用的字段?你为什么要提交它?我的猜测是您有一个字段,您以某种方式更新并且您需要它的新值。使用脚本方法或采取其他方法。在禁用字段上强制设置器似乎没有必要(IMO)。
  • 感谢 Gamb 的建议。是的,您所说的非常需要禁用字段。假设我有许多禁用的字段,其中包含取决于同一页面上许多其他字段的值。编写脚本来单独处理它们将是开销。我在想,单击具有操作的按钮时,我将获取所有禁用的字段,并从视图+名称中找到它们的设置器并调用它们。听起来很奇怪,但我认为这是我可以处理许多禁用字段并同时拥有通用代码的方法之一。
【解决方案2】:

您可以在您的样式中只创建disabled='false' 并使用style="display:none"(或者最好在css 类中这样做)?因此,该字段将从 jsf 的角度进行处理,但不会在浏览器端的视图中占用空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2011-07-13
    • 2011-03-18
    • 2013-01-07
    • 2011-04-17
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多