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

Sightly三元表达式失效问题排查及正确写法咨询

问题分析与解决

你的代码存在两个核心错误:

  1. 三元表达式未完整包裹在EL语法中:你仅将判断条件${atcList.first || atcList.last}放在${}内,后续的? <b>...</b> : ...被当作普通文本输出,完全没有触发三元逻辑判断。
  2. 表达式外嵌套HTML标签无效:Sightly不会解析表达式外的分支逻辑,导致<b>标签被当作纯文本显示,无法实现加粗效果。

Sightly三元表达式的正确用法

Sightly要求整个三元逻辑(判断条件+分支内容)必须全部包裹在${}中;若分支内容包含HTML标签,还需用@html指令禁用自动转义(否则HTML会被转义成文本)。

写法1:纯三元表达式实现

<p>${atcList.first || atcList.last ? '<b>Code ' + atc.code + '</b>' : 'Code ' + atc.code @ html}</p>
  • @ html指令:告知Sightly不要转义输出的HTML内容,确保<b>标签能正常渲染。
  • 分支内容需通过字符串拼接组合,不能直接插入EL表达式。

写法2:Sightly原生条件指令(推荐)

Sightly更推荐使用data-sly-test指令做条件渲染,可读性更强,也避免了拼接HTML的麻烦:

<p>
    <b data-sly-test="${atcList.first || atcList.last}">Code ${atc.code}</b>
    <span data-sly-test="${!atcList.first && !atcList.last}">Code ${atc.code}</span>
</p>

若不想生成多余的<span>标签,可使用data-sly-unwrap移除容器标签:

<p>
    <span data-sly-test.isFirstOrLast="${atcList.first || atcList.last}" data-sly-unwrap>
        <b>Code ${atc.code}</b>
    </span>
    <span data-sly-test="${!isFirstOrLast}" data-sly-unwrap>
        Code ${atc.code}
    </span>
</p>

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:50:25