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

Ken*_*Ken 13 jsp el

我想做这样的事情:

<display:table name="${summary${index}}">
Run Code Online (Sandbox Code Playgroud)

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


更新:谢谢你们.问题出在嵌套EL上.我试着用

<display:table name="summary${index}">
Run Code Online (Sandbox Code Playgroud)

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

<display:table name="${summary01}">
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 18

你不能嵌套EL表达式.但是,您可以将它们连接起来.

<display:table name="${summary}${index}">
Run Code Online (Sandbox Code Playgroud)

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

<display:table name="summary${index}">
Run Code Online (Sandbox Code Playgroud)

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

<display:table name="${requestScope['summary01']}">
Run Code Online (Sandbox Code Playgroud)

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

<display:table name="${requestScope[summary]}">
Run Code Online (Sandbox Code Playgroud)

所以,我们想把它设置在某个地方.JSTL c:set标签非常适合这个:

<c:set var="summary" value="summary${index}" />
Run Code Online (Sandbox Code Playgroud)