【发布时间】: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