【问题标题】:Invoke EL method with null-string parameter receives empty-string使用空字符串参数调用 EL 方法接收空字符串
【发布时间】:2015-04-10 14:14:49
【问题描述】:

我有一个 PrimeFaces commandLink,我想用一些参数调用一个 actionListener。这些参数之一可能是 null。首先,我偶然发现了this issue,并将票证中的补丁 2152 应用于 jbossweb 7.0.17(这是 JBoss 附带的补丁)。 NPE 消失了,但我的 actionListener 获得了一个空字符串 passend 作为参数,而不是 null。我还将系统属性 org.apache.el.parser.COERCE_TO_ZERO 设置为 false,但方法调用没有任何改变。

actionListener="#{fileDownloadBean.downloadChainFile(cc.attrs.forChain, cc.parent.attrs.value, cc.parent.attrs.header)}" 
// => cc.parent.attrs.header could be null but is passed as empty string

如果我通过 EL 检查 JSF/xHTML 中的 null 值,则一切正常

#{cc.parent.attrs.header eq null}
// => returns true

//Edit 03.04.2015 18:05: returns also true
#{empty cc.parent.attrs.header}

关于我做错了什么有什么建议吗?是否禁止将 null 传递给 EL 方法?

我正在使用 PrimeFaces 5.2、JBoss 7.1.3、Mojarra 2.1.29-jbossorg-1。

编辑 11.04.2015 17:10

正如评论中提到的,我已经测试了下面的上下文参数,但没有成功。它似乎只影响 UIInput-components 的提交值。

javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL=true

【问题讨论】:

  • 尝试使用empty 运算符,如#{empty cc.parent.attrs.header}
  • 我不知道这对这里有什么帮助 - 抱歉。我需要字符串值或 null。使用 empty 将产生一个布尔值。还是您的意思是第二个代码示例?这也返回 true - 正如预期的那样。
  • 对不起,我只看你的第二个sn-p
  • @grubi:有什么解决办法吗?
  • @Toru:很久以前,我不记得我是否改变了什么。但是应用程序中的源代码仍然是相同的。我认为我们升级了一些库版本,但我不确定。我们的基础架构发生了一些变化(例如 jboss -> wildfly),我无法查看版本是否发生了变化。

标签: jsf-2 primefaces jboss


【解决方案1】:

在您的 web.xml 中:

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

BalusC talks about this briefly here:

【讨论】:

  • 对不起,我忘了把我已经添加这个参数的信息添加到may web.xml中。此外,这个参数似乎只在扩展 UIInput 的组件内部使用。我可以确认,我从 inputText/inputTextarea/etc 中得到 null 而不是空字符串,但在 actionListener 的方法调用中仍然得到一个空字符串。无论如何,感谢您提醒我添加此信息。
猜你喜欢
  • 2021-10-12
  • 2013-09-02
  • 2013-05-31
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多