2009-12-16 68 views
3

我有一个我正在处理的JSP页面,我对某些格式化/编码感到困惑。JSP代码中的大括号

有部分地方很明显这是怎么回事:

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

但现在我明白了,我不知道如何和为什么它的工作原理/编译部分:

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

有没有if或同时或为这些大括号开头处的任何内容。为什么编译和生成一个好的jsp页面?

+0

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

回答

8

它们是范围限制的,按照正常的Java行为,就像这个other/similar question一样。

实际上,它们定义了一个块,而sClass只在该特定块中可用。

+0

这是一件好事吗?我正在尝试将这些代码更新到最新版本,并且从未见过这种代码。 – Stevus

+1

嗯,这取决于 - 如果你想确保'sClass'只在大括号的范围内使用,那么它可以是有帮助的,但它当然不是必需的。 –

2

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

3

我建议您不要学习如何在JSP中编写scriptlet。最坏的情况是它们很丑并且不可维护。

更好的策略是学习JSTL并将脚本从页面中排除。我认为O'Reilly的Hans Bergsten的JSP书是最好的。阅读它,并且不要编写scriptlet代码。你会很高兴你做到了。

2

别担心。在JSP文件中编写原始Java代码被认为是bad practice。替换(对不起)讨厌东西由JSTLELcore 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}" /> 

虽然最后的例子不作任何意义,但是这应该给你图片。

0

在任何代码块开始之前,您不需要放置任何关键字,如if,for,while等。无论您在块中定义的变量是什么,只会在该块中可见。