XPages中EL表达式字符串拼接被误转换为Long类型的技术问题求助
XPages EL字符串拼接被误判为算术运算的问题解决
我太懂你遇到的这个离谱问题了——在XPages这种老版本EL环境里,确实会出现这种反直觉的行为。咱们先拆解清楚原因,再给你两个可行的解决办法。
问题根源
XPages基于的是EL 2.2及以下版本,这个版本的+运算符处理逻辑有个大坑:它会优先尝试把操作数转换成数字做算术加法,只有当两边都明确是字符串且无法转数字时,才会执行字符串拼接。
你的表达式#{crmDoc['SKONTO_PZ'+i]}被EL错误解析成了「访问crmDoc数组的'SKONTO_PZ' + i索引」——数组索引必须是数字类型,所以EL会强行把字符串SKONTO_PZ转换成Long类型,这自然就触发了转换失败的报错。它完全没意识到你是想通过字符串拼接来生成文档字段名。
解决方案1:用SSJS直接处理字段拼接
最简单的办法是把字段名的拼接逻辑放到SSJS里,绕过EL的错误解析:
<xp:repeat rows="3" value="#{javascript: ['1','2','3']}" var="i"> <xp:div> <xp:text styleClass="columnLabel" value="Bei Zahlung innerhalb von "></xp:text> <xp:text value=" Tagen, "/> <!-- 把EL替换成SSJS,直接拼接字段名并取值 --> <xp:text style="font-weight: bold" value="#{javascript: crmDoc['SKONTO_PZ' + i]}"/> <xp:text value=" % Skonto "/> <div class="cleaner4px"></div> </xp:div> </xp:repeat>
解决方案2:提前定义拼接好的字段名变量
如果你更倾向于用EL访问,可以在repeat内部先把拼接好的字段名存成一个变量,再用EL引用:
<xp:repeat rows="3" value="#{javascript: ['1','2','3']}" var="i"> <!-- 提前用SSJS生成字段名,存在变量里 --> <xp:variable var="targetField" value="#{javascript: 'SKONTO_PZ' + i}" /> <xp:div> <xp:text styleClass="columnLabel" value="Bei Zahlung innerhalb von "></xp:text> <xp:text value=" Tagen, "/> <!-- EL直接引用预定义的字段名变量 --> <xp:text style="font-weight: bold" value="#{crmDoc[targetField]}"/> <xp:text value=" % Skonto "/> <div class="cleaner4px"></div> </xp:div> </xp:repeat>
这两种方案都能避开EL对+运算符的错误解析,完美解决你遇到的类型转换问题。
内容的提问来源于stack exchange,提问作者maio290
相关产品推荐
相关产品推荐

