【问题标题】:Curly brackets in JSP codeJSP 代码中的大括号
【发布时间】:2010-12-27 01:43:41
【问题描述】:

我正在处理一个 JSP 页面,但我对某些格式/编码感到困惑。

有些部分很明显发生了什么:

<%
        if (.....)
        {
%>
      <input type=hidden name="blahblah" value="moreblah">
<%
        }
%>

但现在我看到部分我不知道它是如何或为什么工作/编译的:

<%
    {
        // do stuff here
        String sClass = "blahblah"
        if ( sClass.equals("") )
        {
            sClass = "blah";
        }
    }
%>

在这些大括号的开头没有 if 或 while 或 for 或任何东西。为什么编译生成一个好的jsp页面?

【问题讨论】:

  • 马克的回答有。我建议您阅读 Kathy Sierra 的 Head First JSP & servlets:它有助于理解 JSP 页面的内部工作。

标签: java jsp


【解决方案1】:

您不需要在任何代码块的开头放置任何关键字,例如ifforwhile 等。您在块中定义的任何变量都将仅在该块中可见。

【讨论】:

    【解决方案2】:

    别担心。在 JSP 文件中编写原始 Java 代码被视为bad practice。用JSTLEL 替换那个(对不起)讨厌 的东西。 core taglib 支持几乎所有你需要的东西。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    
    <c:if test="${ ... }">
        <input type=hidden name="blahblah" value="moreblah">
    </c:if>
    
    <c:set var="sClass" value="blahblah" />
    <c:set var="sClass" value="${sClass == '' ? 'blah' : sClass}" />
    

    虽然最后一个例子没有任何意义,但这应该为您提供图片。

    【讨论】:

      【解决方案3】:

      我建议您不要学习如何在 JSP 中编写脚本。它们充其量是丑陋的,最坏的情况是无法维护。

      更好的策略是学习JSTL 并将scriptlet 排除在您的页面之外。我认为 Hans Bergsten 的 O'Reilly 的 JSP 书是最好的。阅读它,不要编写 scriptlet 代码。你会很高兴你这样做了。

      【讨论】:

        【解决方案4】:

        我相信像其他语言一样,花括号只是告诉编译器/代码解释器您已将多行划分为特定范围的一种方式。范围是指当前运行的代码可以访问在当前“范围”内声明的变量、函数和其他资源的区域。

        【讨论】:

          【解决方案5】:

          根据正常的 Java 行为,它们是范围限制的,如 other/similar question

          本质上,它们定义了一个块,而 sClass 仅在该特定块中可用。

          【讨论】:

          • 这是一件好事吗?我正在尝试更新此代码,但以前从未见过。
          • 这取决于 - 如果您想确保 sClass 仅在大括号范围内使用,那么它可能会有所帮助,但肯定不是必需的。
          猜你喜欢
          • 2011-04-03
          • 2011-02-04
          • 2012-09-12
          • 1970-01-01
          • 1970-01-01
          • 2010-12-20
          • 2021-07-30
          • 1970-01-01
          • 2011-01-21
          相关资源
          最近更新 更多