You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:12:41