困扰JSP的一些问题与解决方法 (2)
问题 #4: 很粗的循环
在jsp中循环很困难。这里是用jsp重复打印出每一个isp对象名字。
<%
enumeration e = list.elements();
while (e.hasmoreelements()) {
out.print("the next name is ");
out.println(((isp)e.nextelement()).getname());
out.print("<br>");
}
%>
也许什么时候会有用户自定义标记来做这些循环。对"if"也是如此。jsp页可能看上去成了很古怪的java代码。而同时,webmacro循环很漂亮:
#foreach $isp in $isps {
the next name is $isp.name <br>
}
如果必要的话,#foreach指令可被自定义的 #foreach-backwards指令很容易地取代。
用jsp的话很可能变这样:(这里是一个可能的 <foreach>标记)
<foreach item="isp" list="isps">
the next name is <jsp:getproperty name="isp" property="name"/> <br>
</foreach>
设计者当然地回选择前者。
问题 #5: 无用的出错信息
jsp常有一些令人惊讶的出错信息。这是因为页面首先被转换成为一个servlet然后才进行编译。好的jsp 工具可以相对增加找到出错位置的可能性,但即使是最好的工具也无法使所有出错信息都能容易地被读懂。由于转化的过程,一些错误对工具来说可能根本不可能被识别。
例如,假设jsp页面需要建立一个对所有页通用的标题。以下代码并没有错:
<% static string title = "global title"; %>
但tomcat会提供以下出错信息:
work/%3a8080%2f/jc_0002ejspjc_jsp_1.java:70: statement expected.
static int count = 0;
^
此信息认为以上脚本被放入 _jspservice()方法而静态变量不允许放入方法中。该语法应该是 <%! %>。页面设计者很难读懂这些出错信息。即使最好的平台在这方面也做得很不够。即使所有 java代码都从页中移出也无法解决问题。另外,以下表达式有什么错?
<% count %>
tomcat给出:
work/8080/_0002ftest_0002ejsptest_jsp_0.java:56: class count not found in
type declaration.
count
^
work/8080/_0002ftest_0002ejsptest_jsp_0.java:59: invalid declaration.
out.write(" ")
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。