【问题标题】:JSF - UIInput component with no input sets String Property to empty stringJSF - 没有输入的 UIInput 组件将字符串属性设置为空字符串
【发布时间】:2011-05-19 19:19:06
【问题描述】:

我已经被这个问题困扰了一段时间了。我发现了一篇较早的帖子,其中 BalusC 提供了有关为 JSF 1.2 版创建自己的名为“EmptyToNullConverter”的转换器的建议 或在 JSF 2.0 中指定上下文参数

<context-param>
  <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  <param-value>true</param-value>
</context-param>

这些选项都不适合我。它对其他人有用吗。

我自己进行了一些调查,最终单步执行了 UIInput 源。我可以看到该值是空的,直到它被传递给 ValueExpression。不幸的是,我没有这方面的来源,所以我无法进一步深入研究。我假设它在这里最终实例化一个新的字符串类型并将其传递给模型属性?

我的环境如下

  • 使用 jsf-api-2.0.3 和 jsf-impl-2.0.3 jar 运行 Mojarra RI
  • 也使用richfaces 3.3.3,所以我不得不禁用jsf2的viewhandler。结果仍然使用 facelets jar
  • 这一切都在 Tomcat 6 上运行

任何帮助将不胜感激

【问题讨论】:

  • 模型属性的类型是什么?字符串还是整数/长整数/数字?
  • 很抱歉在这里重复我自己,但我不小心按了回车键。想就下面发布的答案添加这一点。我想创建包装器,但模型对象是从 wsdl 文件生成的。看起来很奇怪,你不能配置一个框架来允许空条目?
  • 这就是 HTTP 的本质。输入字段始终作为请求参数名称-值对提交,无论该值是否填写。在 Servlet API 中,只有当请求参数名称不存在时,它的值才会是null。您当然可以配置一个框架来制作空提交值null。您甚至提到了两种解决方案,一种仅适用于 JSF 2.0,另一种适用于 JSF 1.2 或更新版本。它们不适合您并不意味着框架不提供它。你的问题很可能出在 RichFaces 上,但由于我没有使用,所以无法详述。

标签: jsf jsf-2


【解决方案1】:

我知道我们在使用 Richfaces 和 Sun 的默认 JSF 实现 1.2 时遇到了这个问题。 解决此问题的一种方法是使用您自己的自定义转换器来将空值(0,“”)转换为空值。

另一种方法是在您的 backingbean 中进行转换:

我的BackingBean { 字符串我的值; 公共无效 setMyValue(字符串 v){ if (v==null || v.trim().length==0) { 我的价值==空; } 别的 { 我的价值=v; } } 公共字符串 getMyValue() { 返回我的值; } }

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2012-03-25
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多