JSP代码中的括号

时间:2009-12-16 01:38:22

标签: java jsp

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

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

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

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

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

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

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

我建议您不要学习如何在JSP中编写scriptlet。他们最好是丑陋的,最糟糕的是不可维护。

更好的策略是学习JSTL并将scriptlet保留在您的网页之外。我认为来自O'Reilly的Hans Bergsten的JSP书是最好的。阅读,不要编写scriptlet代码。你会很高兴的。

答案 2 :(得分:2)

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

答案 3 :(得分: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}" />

虽然最后一个例子没有任何意义,但这应该会给你 图片。

答案 4 :(得分:0)

在开始任何代码块之前,您无需添加ifforwhile等任何关键字。您在块中定义的任何变量只能在该块中可见。