我正在处理一个JSP页面,我对一些格式化/编码感到困惑。
有些部分很明显发生了什么:
<%
if (.....)
{
%>
<input type=hidden name="blahblah" value="moreblah">
<%
}
%>
但现在我看到的部分我不知道它是如何工作/为什么工作/编译:
<%
{
// do stuff here
String sClass = "blahblah"
if ( sClass.equals("") )
{
sClass = "blah";
}
}
%>
这些花括号的开头没有if或while或for或者任何东西。为什么要编译并生成一个好的jsp页面?
答案 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。将JSTL和EL替换为讨厌的内容(对不起)。 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)
在开始任何代码块之前,您无需添加if
,for
,while
等任何关键字。您在块中定义的任何变量只能在该块中可见。