JSP由浅入深(11)标记库

js

 JSP 1.1提出了一种扩展的JSP标志的方法,这种方法命名为“标志库”。这些库允许另外的一些类似于jsp:include 或者jsp:forward的标志,但是它们不是以jsp:为前缀的并且还附件一些特性。

  为了介绍标志库,在本教程中我们使用Blazix标志库作为例子。这个标志库只能用在Blazix服务器中,这个服务器你可以免费下载。

每一个标志库都有它自己的标志库特殊的文档。为了使用标志库,你可以使用"taglib" directive来指出标志库“description”处在什么地方。对于Blazix标志库而言,directive如下:

<%@ taglib prefix="blx" uri="/blx.tld" %>

上面者句中“uri”就是指出了标志库描述所在的地方。标志库的前缀是不同的。这个指令的意思是说我们可以使用blx:来使用库中的标志。Blazix标志库提供了一个blx:getProperty标志。这个标志可以允许用户编辑表单数据。现在,在GetName.jsp文件中,我们增加一个jsp:useBean并且将表单放置在blx:getProperty中:

<%@ taglib prefix="blx" uri="/blx.tld" %>

<jsp:useBean id="user" class="UserData" scope="session"/>

<HTML>

<BODY>

<blx:getProperty name="user" property="*">

<FORM METHOD=POST ACTION="SaveName.jsp">

What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR>

What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR>

What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4>

<P><INPUT TYPE=SUBMIT>

</FORM>

</blx:getProperty>

</BODY>

</HTML>

从上面的代码中我们可以发现blx:getProperty不是以/>结尾的,而是用来结尾。这条语句将所有的表单输入区域输入到blx:getProperty中,这样它们就可以被标志库正确地修改。

接着建立一个从GetName.jsp到NextPage.jsp的连接,你将发现bean的数据自动显示在输入区域中。所以现在用户可以编辑数据了。

至此,我们还有一些问题还没有澄清。首先,用户不能清除名字区域;而且如果用户在“age”区域键入一个不对的内容(不是一个效果的整型数值),Java异常错误就会发生。
  现在,我们将使用Blazix标志库中的其它标志来解决这个问题。Blazie提供了一个blx:setProperty标志来解决这个问题。Blx:setProperty允许我们定义一个异常错误处理方法。如果有异常错误发生,我们可以为用户收集一个错误信息并且继续处理。
  下面是我们修改后的SaveName.jsp,它可以处理任何错误。它不仅可以显示GetName.jsp并且在其上可以键入正确的数据,而且自动地连接到NextPage.jsp:

<%@ taglib prefix="blx" uri="/blx.tld" %>

<%!

boolean haveError;

StringBuffer errors;

public void errorHandler( String field,

String value,

Exception ex )

{

haveError = true;

if ( errors == null )

errors = new StringBuffer();

else

errors.append( "<P>" );

errors.append( "<P>Value for field \"" +

field + "\" is invalid." );

if ( ex instanceof java.lang.NumberFormatException )

errors.append( " The value must be a number." );

}

%>

<%

// Variables must be initialized outside declaration!

haveError = false;

errors = null;

%>

---------------

<BODY>

<jsp:useBean id="user" class="UserData" scope="session"/>

<blx:setProperty name="user"

property="*"

onError="errorHandler"/>

<%

if ( haveError ) {

out.println( errors.toString());

pageContext.include( "GetName.jsp" );

} else

pageContext.forward( "NextPage.jsp" );

%>

</BODY>

</HTML>

  这里要注意haveError和errors必须每次都重新初始化,因为它们在声明的外部被初始化。

  现在,如果一个错误发生在blx:setProperty处理的过程,我们就显示这个错误并再次回到GetName.jsp以使用户可以校正这个错误。如果没有错误发生,我们就自动让用户连接到NextPage.jsp。
如果你细心点你还可以发现表单仍有一个问题,即“age”开始显示空而不是0。这个问题我们可以通过增加“emptyInt=0”到blx:getProperty和blx:setProperty标志中,这样bean区域就被初始化为0了。如果键入的年龄不是一个有效的数值,那么我们就使用0来标志空字符。

  另外一个小的问题是如果有错误出现并且我们旧书包含“GetName.jsp”的时候,就得到两个"<HTML>"标志。对于这个问题一个完美的解决方法是去掉out.println,并按如下传递错误:

<%

if ( haveError ) {

request.setAttribute( "errors",

errors.toString());

pageContext.forward( "GetName.jsp" );

} else

pageContext.forward( "NextPage.jsp" );

%>

  那么我们可以在GetName.jsp执行“request.getAttribute”,并且如果返回数值为非空,就显示错误。这个就留着作为本节教程的练习吧。

  最后,再说说本节的练习吧,首先刚才说的内容。还要阅读标志库文档中的SQL标志,然后创建一个数据库表格;再编写一个JSP文件,其上有一个 FORM以及表单上有一个选择框;接着使用SQL标志来根据数据库表格制作选择框

时间: 2024-10-26 14:58:36

JSP由浅入深(11)标记库的相关文章

JSP由浅入深(11)—— 标记库

js    JSP 1.1提出了一种扩展的JSP标志的方法,这种方法命名为"标志库".这些库允许另外的一些类似于jsp:include 或者jsp:forward的标志,但是它们不是以jsp:为前缀的并且还附件一些特性. 为了介绍标志库,在本教程中我们使用Blazix标志库作为例子.这个标志库只能用在Blazix服务器中,这个服务器你可以免费下载.      每一个标志库都有它自己的标志库特殊的文档.为了使用标志库,你可以使用"taglib" directive来指

JSP由浅入深(11)―― 标记库

JSP 1.1提出了一种扩展的JSP标志的方法,这种方法命名为"标志库".这些库允许另外的一些类似于jsp:include 或者jsp:forward的标志,但是它们不是以jsp:为前缀的并且还附件一些特性. 为了介绍标志库,在本教程中我们使用Blazix标志库作为例子.这个标志库只能用在Blazix服务器中,这个服务器你可以免费下载. 每一个标志库都有它自己的标志库特殊的文档.为了使用标志库,你可以使用"taglib" directive来指出标志库"d

JSP标准标记库促进了网页的开发

js|标准|网页 Java Server Pages (JSP) 标准标记库 (JSTL)的版本的发布对于JSP/servlet开发者来说是一个重大的进展.有了一个表达语言(EL)和一组四种强大的.易于学习的标准标记库,JSTL极有可能不久后成为实现动态的.基于Java的站点的主要方法. 1996年对JSP servlet的介绍使得Java成为动态网页开发的合理的选择.随后出现的Java服务器页(JSP)是走向快速的.可维护的Java网页实现过程的合理进化的一步,紧接着就出现了JSP标记的支持.

使用JSP标记库校验用户输入

js 在任何一个基于Web的应用中,程序逻辑要求用户提交需要校验的信息,而应用的创建者则可以用两种方式来检测数据.第一种方法就是在客户端校验,甚至在信息提交到服务器上之前也可以进行.通常,这种校验使用运行在客户端因特网浏览器内的JavaScript就可以完成.尽管表格将要提交,但是脚本还是会检查所有请求的域,如果不符合就弹出错误信息.第二种方法就是在服务器端校验.在执行对数据的任何操作之前,使用应用服务器支持的技术来完成校验. 服务器端的校验使服务器更紧张,却给予了程序员更多的控制,并且保证了数

JSP标记库

简介:JavaServer Pages(JSP)技术是用于开发 Web 应用的优秀体系结构,但它的最重要的实用技 术之一 ― 定制标记库(custom tag library)― 却常常未被充分利用.标记库实用技术未被充分利用 的主要原因不是技术上的,而是语言上的.标记库生产者和消费者说的不是相同的语言.JSP 专家和顾 问 Noel J. Bergman 揭示了问题的本质并提供了一些可行的解决方案. 将底层内容模型与表示分离是件好事,这在 Web 应用开发人员中间得到了普遍的认同.在多数大型

JSP最佳实践: 将自定义标记库打包

简介:将标记库存放在本地文件系统中的确有利于内部(in-house)开发和测试,但是这并非永远都 是好的解决方案.自定义标记库应该能够被广泛地访问,也就是说,必须以一种标准的和安全的方式来发 布它们.BrettMcLaughlin 解释了如何将您的自定义标记库打包到 JAR 文件,以便在任何 JSP 兼容的 Web 容器中更容易地维护.发布和安装它们. 到目前为止,我们在本系列中讲到的都是自定义标记库在本地文件系统中的情况,在这种情况下,我 们可以很容易地访问和操作这些自定义标记库.然而,虽然本

JSP由浅入深(1)-- 熟悉JSP服务器

js|服务器 熟悉JSP服务器 本"JSP由浅入深" 系列教程是面向中级和高级用户的,它需要HTML和Java的基础.你应该会将HTML网页连接到一起,并且会利用Java来进行编程.如果你还没有这个基础,建议你还是先打好基础为好.这个系列教程将通过编制简单的例子到复杂的例子来教会你JSP.本系列教程是采用循序渐进的方法来进行阐述的,即由浅入深.为了使你能够获得最大的进步,建议你再学习的过程中将所有的例子自己进行调试.开始的例子可能会很简单,所以开始的时候你要特别耐心,不要认为太简单而跳

JSP由浅入深(1)—— 熟悉JSP服务器_JSP编程

熟悉JSP服务器 本"JSP由浅入深" 系列教程是面向中级和高级用户的,它需要HTML和Java的基础.你应该会将HTML网页连接到一起,并且会利用Java来进行编程.如果你还没有这个基础,建议你还是先打好基础为好.这个系列教程将通过编制简单的例子到复杂的例子来教会你JSP.本系列教程是采用循序渐进的方法来进行阐述的,即由浅入深.为了使你能够获得最大的进步,建议你再学习的过程中将所有的例子自己进行调试.开始的例子可能会很简单,所以开始的时候你要特别耐心,不要认为太简单而跳过.如果你仔细

JSP由浅入深(1)―― 熟悉JSP服务器

熟悉JSP服务器 本"JSP由浅入深" 系列教程是面向中级和高级用户的,它需要HTML和Java的基础.你应该会将HTML网页连接到一起,并且会利用Java来进行编程.如果你还没有这个基础,建议你还是先打好基础为好.这个系列教程将通过编制简单的例子到复杂的例子来教会你JSP.本系列教程是采用循序渐进的方法来进行阐述的,即由浅入深.为了使你能够获得最大的进步,建议你再学习的过程中将所有的例子自己进行调试.开始的例子可能会很简单,所以开始的时候你要特别耐心,不要认为太简单而跳过.如果你仔细