【问题标题】:Concatenate of a string within a loop in JSP在 JSP 中的循环内连接字符串
【发布时间】:2013-11-06 18:06:34
【问题描述】:

${x}="mit"

${Place['name_mit']} 将给出美国的结果。

但是如果我尝试${Place['name_'+x]} 我会出错。

如何解决这个问题?

【问题讨论】:

  • 您是否尝试过将字符串预先连接到变量中并将其用作键?
  • 我不能那样做,这些学校名称来自 db,对于每所学校我都在执行相同的操作。
  • 我的意思是这样。 ${x}="name_mit" 然后 ${Place[x]}
  • 手前如何拼接?

标签: java javascript jsp jstl jsp-tags


【解决方案1】:

是的,它无法编译,因为+ 运算符不用于字符串连接(在 EL 3.0、Java EE 7 之前)。
只需使用concat

${Place['name_'.concat(x)]}

来自表达式语言 3.0,
使用+ 运算符连接两个字符串是有效的。

${Place['name_'+x]}  //valid as of EL 3.0

来自EL 3.0 Specs

字符串连接运算符

评估

A += B 
  • 将 A 和 B 强制转换为字符串。
  • 返回 A 和 B 的连接字符串。

【讨论】:

  • 我收到此消息 未指定默认命名空间时,函数 concat 必须与前缀一起使用
  • @user35690 :它对我来说工作正常。有关错误,请参阅this answer
  • 我正在使用 apache tomcat,感谢他的链接。但我认为这是一个不同的问题
  • @user35690 :在问题中发布堆栈跟踪。使用名称、版本、java ee 版本指定 Web 服务器。
  • 当前使用jsp 1.2 1.01.2app/WEB-INF/app.tld
【解决方案2】:

您不能像那样内联连接映射键。这对我有用:

<%
    Map<String, String> things = ImmutableMap.of("thing1", "a", "thing2", "b", "thing3", "c");
    pageContext.setAttribute("things", things);
    for (int i = 1; i <= 3; i++) {
        String key = "thing" + i;
        pageContext.setAttribute("key", key);

%>
    <c:out value="${key}"/>: <c:out value="${things[key]}"/> <br>
<%
    }
%>

显然,如果没有来自您的用例的上下文,我必须自己拼凑一个适当的页面上下文状态。必要时替换。

【讨论】:

  • 太复杂了。只需在 EL 中使用 += 运算符即可。
  • @Mark,你能详细说明一下吗?请注意,我回答中的大部分复杂性是让自己陷入 OP 所询问的情况。 “答案”部分只有两行。
猜你喜欢
  • 2015-04-23
  • 2011-02-02
  • 1970-01-01
  • 2016-12-15
  • 2015-12-16
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多