【问题标题】:How to concatenate Strings in EL? [duplicate]如何在 EL 中连接字符串? [复制]
【发布时间】:2011-07-27 00:08:36
【问题描述】:

显然,您不能使用普通的 + 运算符在 jsp 中附加字符串……至少它对我不起作用。有没有办法做到这一点?我的相关代码片段......

${fn:length(example.name) > 15 ? fn:substring(example.name,0,14) + '...' : example.name} // does not work because of + operator

【问题讨论】:

  • 你确定你不需要在fn:substring(example.name,0,14) + '...' 周围加上括号吗?我一直觉得 Java 的三元运算符很挑剔
  • 不,这无济于事。好主意。
  • 我认为将逻辑移到examplegetName()函数中会更好。我想知道为什么这个线程有 [javascript] 标签?我认为应该在这里使用 [el] 标签而不是 [javascript] 标签
  • 我赞同 Sangdol 的想法,但稍作调整......看起来你正在截断,也许只是为了 UI 目的。添加一个 getNameForUI() 调用怎么样?我以前遵循过这样的命名约定 (...forUI()),如果为了 UI 中的外观而只需要稍微更改几个数据点,它会有所帮助。如果必须截断大量不同的数据点,这个想法就会失效。
  • @mrk:“挑剔”行为仅在您在单个 EL 表达式(例如 ${cond1 ? .. : cond2 ? ... : ...})中有多个时才会发生。 Apache EL 解析器(它是最广泛使用的解析器)确实有这方面的怪癖。但在这种特殊情况下,没有多个条件表达式。

标签: jsp el


【解决方案1】:

EL 不知道字符串连接运算符。相反,您只需将多个 EL 表达式内联在一起。 + 运算符在 EL 中专门用作数字的求和运算符。

这是您可以做到的方法之一:

<c:set var="tooLong" value="${fn:length(example.name) > 15}" />
${tooLong ? fn:substring(example.name,0,14) : example.name}${tooLong ? '...' : ''}

另一种方法是为此使用 EL 函数,您可以使用纯 Java 处理此问题。例如,请参阅Hidden features of JSP/Servlet 中我的答案底部附近的“EL 函数”一章。你希望最终变成这样:

${util:ellipsis(example.name, 15)}

public static String ellipsis(String text, int maxLength) {
    return (text.length() > maxLength) ? text.substring(0, maxLength - 1) + "..." : text;
}

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2012-07-03
    • 2011-04-08
    • 2011-03-12
    • 2010-09-22
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多