将字符串与变量值组合为EL中另一个变量的名称

时间:2010-06-28 02:31:37

标签: jsp el

我想做这样的事情:

<display:table name="${summary${index}}">

但它不起作用抛出异常:“$ {summary $ {selChrm}}”包含无效的表达式。 我希望用户使用下拉列表来选择一个选择并放入变量索引。然后该表将显示相应的javabean对象列表,即。命名摘要01,摘要02等。我该怎么做?提前谢谢。


更新:谢谢大家。问题出在嵌套EL上。我试着用

<display:table name="summary${index}">

但是表格中没有任何内容显示,因为summary01是变量名称。如果我对变量名称进行硬编码,它将起作用:

<display:table name="${summary01}">

因此,我怎样才能嵌套EL?如果它不可能在JSTL中,我怎样才能实现用户可以使用下拉列表来确定要在表中显示哪些内容的行为?再次感谢。

4 个答案:

答案 0 :(得分:18)

您无法嵌套EL表达式。但是你可以将它们连接起来。

<display:table name="${summary}${index}">

或者,如果${summary}实际上不是任何范围内的对象,请执行

<display:table name="summary${index}">

更新:好的,您确实需要访问${summary01}。如果您事先知道范围,则可以使用括号表示法访问它。想象一下,它的请求作用域,您可以“普通”访问它,如下所示:

<display:table name="${requestScope['summary01']}">

但你实际上也可以在大括号中使用另一个EL变量(只是取消引用它):

<display:table name="${requestScope[summary]}">

所以,我们想把它设置在某个地方。 JSTL c:set标记完全适用于此:

<c:set var="summary" value="summary${index}" />

答案 1 :(得分:3)

第一步:

<c:set var="summary" value="${requestScope['summary'.concat(index)]}" />

第二步:

<display:table name="${summary}">

简单如下:)

UPDATE 正如BalusC在评论中提到的那样,你需要3.0 Servlet才能使用它。

答案 2 :(得分:1)

这对JSTL来说真的很糟糕:没有直接的方法来做如果你想要这样做 indide 一个JSTL表达式。换句话说,没有字符串连接运算符。

你可以随时

 <something foo='${something} ${something_else}'/>

但这并不总是有用。

在我的世界里,我实现了自己的“concat”功能,所以我可以说

$(foo:bar(mystuff:concat("something", something.else))}

答案 3 :(得分:0)

它对我有用。

${not empty marginLeft ? 'margin-left:'.concat(marginLeft) : ''}