【问题标题】:Combining a string with the value of a variable to be the name of another variable in EL将字符串与变量的值组合为EL中另一个变量的名称
【发布时间】:2010-06-28 02:31:36
【问题描述】:

我想做这样的事情:

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

但它不起作用会引发异常:“${summary${selChrm}}”包含无效的表达式。 我希望用户使用下拉列表来选择一个选项并放入变量索引。然后表格会显示对应的javabean对象列表,即。命名为 summary01、summary02 等。我该怎么做?提前致谢。


更新:谢谢大家。问题在于嵌套的 EL。我尝试使用

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

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

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

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

【问题讨论】:

标签: jsp el


【解决方案1】:

您不能嵌套 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}" />

【讨论】:

    【解决方案2】:

    第一步:

    &lt;c:set var="summary" value="${requestScope['summary'.concat(index)]}" /&gt;

    第二步:

    &lt;display:table name="${summary}"&gt;

    就这么简单:)

    UPDATE 正如 cmets 中提到的 BalusC,您需要 3.0 Servlet 才能使用它。

    【讨论】:

    • 请注意,这需要 EL 2.2 (Servlet 3.0),在提出这个问题时它还是比较新的。在旧的 EL 版本中,你不能调用这样的方法。
    【解决方案3】:

    这是 JSTL 真正糟糕的一件事:没有直接的方法可以做到这一点如果你想这样做indide JSTL 表达式。换句话说,没有字符串连接运算符。

    你总是可以的

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

    但这并不总是有用的。

    在我的世界里,我已经实现了自己的“concat”函数,所以我可以说

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

    【讨论】:

      【解决方案4】:

      它对我有用。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        • 1970-01-01
        • 2021-12-24
        • 2021-08-22
        • 1970-01-01
        • 2019-05-15
        相关资源
        最近更新 更多