2011-01-21 49 views
2

我有一个由List驱动的SelectOneMenu,每个List都包含一个对象值和一个字符串标签以及一个转换器。所有相当标准。我最初得到了Validation Error: Value is not valid错误,因为在等号方法中有一个错误,但是如何修复的快速搜索引发了另一个问题:关闭SelectOneMenu内部验证

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

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

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

干杯,

巴尼

回答

0

这是由设计。这是标准的网站攻击预防之一。你无法关闭它。

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

+3

“你不能关掉它”:是的 - 这就是我所害怕的。 “......或者寻找一个不太安全的MVC框架......”:对不起,我完全不同意这样做的含义,即将此验证选项设置为使框架更安全。我已经有两个机会在检查列表之前验证数据(自定义验证器和转换器)。如果没有其他检查存在,我可以看到这是作为默认检查的有用性,但我仍然没有理由迫使我进行完全冗余的验证。 – Barney 2011-01-22 04:34:23