【问题标题】:Is it possible, In JSP, to print the value of a variable whose name is in another variable?是否可以在 JSP 中打印名称在另一个变量中的变量的值?
【发布时间】:2009-08-21 10:49:45
【问题描述】:

我遇到的问题是这样的 有变数

<core:set var="type">*one of: load,migrate, or ...* </core:set>

load, migrate, 的值是一个映射。现在,我想根据类型打印这些值?有可能吗?

【问题讨论】:

    标签: java jsp jakarta-ee


    【解决方案1】:

    这样会达到和@Chii的回答一样的效果:

    <c:set var="attributeName" value="foo"/>
    
    <%
      out.println(pageContext.getAttribute(attributeName) + " = " + pageContext.getAttribute(pageContext.getAttribute(attributeName)));
    %>
    

    这很讨厌,如果你需要这样做,它将列出 页面范围内的所有属性

    <%
      for (String attributeName : pageContext.getAttributeNamesInScope(PageContext.PAGE_SCOPE))
      {
        out.println(attributeName + " = " + pageContext.getAttribute(attributeName));
      }
    %>
    

    不要认为在 JSTL 中有办法做到这一点,但你通常只在调试期间需要这个,所以我对 scriptlet 代码没有这样的问题。

    【讨论】:

    • @Chii - 是的,scriptlet 并不是最漂亮的东西,但你总是可以编写一个自定义标签来隐藏它:-)
    【解决方案2】:

    如果它们不在地图中,那就很难了。

    我假设你想按照 perl 的工作方式来做:你可以在哪里输入

    $foo = "stuff";
    $varName = "foo";
    print $$varName; #prints "stuff"
    

    这在 jsp 中不起作用。

    如果是地图,你可以${mapValue[key]}。变量部分附近的 this page 信息

    【讨论】:

    • JSP 中的所有变量都相当于一个映射 - javax.servlet.jsp.PageContext,它提供了查询每个范围的变量名称及其值所需的方法.
    • 你是对的,我想要你在 perl 中这样做的方式,stuff 的值也是地图,suff 不在任何地图中.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2017-03-01
    相关资源
    最近更新 更多