【问题标题】:How can I create dynamic variable names in JSTL or an alternative如何在 JSTL 或替代方法中创建动态变量名称
【发布时间】:2023-03-16 15:25:02
【问题描述】:

我需要使用 JSTL,理想情况下我认为数组会更好,因为我需要使用 data.rows 中的 SQL 数据创建一堆具有值的变量,但我需要使用 row 从数据中获取变量名称。类型。但是我发现这很难,因为您不能使用“${row.type}”定义会话变量,因为它会引发异常。它必须是一个具体的变量名。我原以为数组是最好的,但不知道如何从我的 SQL JSTL 查询中做到这一点:

<sql:query var="data">
    SELECT type, balance FROM Account WHERE account_number IN (SELECT account_number FROM CustomerAccount WHERE customer_number = "${sessionScope.CustomerNumber}");
</sql:query>

这是代码:

<c:forEach var="row" items="${data.rows}">
    <c:set var="${row.type}" value="${row.balance}" scope="session" />
</c:forEach>

任何帮助或提示都会很棒!谢谢。

【问题讨论】:

    标签: sql jsp jstl


    【解决方案1】:

    试试这个,

       <c:forEach var="row" items="${data.rows}" varStatus="status">
         <c:set var="rowType${status.count}" value="${row.balance}" scope="session" />
      </c:forEach>
    

    所以它会像 rowType1、rowType2 等创建,其对应的值将是 balance。 这里,

    ${status.count}
    

    就像 for 循环中的索引。

    或者试试这个,

       <c:forEach var="row" items="${data.rows}">
         <c:set var="rowType${row.type}" value="${row.balance}" scope="session" />
      </c:forEach>
    

    【讨论】:

    • &lt;c:set&gt; 不接受对其var 属性的动态变量,因此这不起作用。
    【解决方案2】:

    如果您使用的是 Spring WebMVC,您可以使用他们的 eval-tag 来动态分配值:

    <spring:eval expression="row.balance" var="rowType${status.count}" scope="session"/>
    

    我不确定会话范围是否真的是正确的做法,但这当然取决于您的应用程序。有关eval 标签的详细信息,请参阅http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/spring.tld.html#spring.tld.eval

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-08-20
      • 2018-05-01
      相关资源
      最近更新 更多