【问题标题】:Turn off the SelectOneMenu internal validation关闭 SelectOneMenu 内部验证
【发布时间】:2011-06-12 23:50:04
【问题描述】:

我有一个由 List 驱动的 SelectOneMenu,每个 List 都包含一个对象值和一个字符串标签,以及一个转换器。都相当标准。我最初收到 Validation Error: Value is not valid 错误是因为 equals 方法中的拼写错误,但快速搜索如何解决这个问题会引发另一个问题:

我的理解是否正确,在这种情况下,会发生什么:

  1. 在菜单中选择了一个项目。
  2. 这会向服务器发送一个字符串值。
  3. 转换器用于将字符串值转换为对象。
  4. JSF 检查对象是否存在于项目列表中。
  5. setter 方法被称为传递对象。

如果是这样,我可以禁用第 4 步吗?如果值无效,我的转换器将抛出 ConverterException,所以对我来说,第二个列表遍历是完全没有必要的。

干杯,

巴尼

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    这是设计使然。这是标准的网站攻击预防措施之一。您无法将其关闭。

    只需将 bean 放在视图范围内(这样就不会在每次请求时都重新获取它),或者如果它困扰您,请寻找一个不太安全的 MVC 框架。

    【讨论】:

    • “你不能把它关掉”:是的——这就是我所担心的。 “......或者寻找一个不太安全的 MVC 框架......”:对不起,我完全不同意让这个验证成为可选会降低框架安全性的暗示。在检查列表之前,我已经有两次验证数据的机会(自定义验证器和转换器)。如果没有其他检查,我可以看到它作为默认检查的有用性,但我仍然认为没有理由强迫我进行完全冗余的验证。
    • 要在托管 bean 中重新创建视图的状态,我们需要正在“验证”的相同表单参数,并且 JSF 会阻止它进入托管 bean。在我看来这不是一个聪明的设计。
    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 2017-09-04
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2013-04-09
    • 2013-08-04
    相关资源
    最近更新 更多