JSP自定义标签学习(高级)
JSP自定义标签学习(高级)
关键字: 自定义标签
BodyTag接口
接口BodyTag的实现类,它是负责操作主体内容(bodyContent).
定义方法:public void doInitBody();
public int doAtferBody();
提示,那些在doStartTag()方法之后被调用的方法依赖于doStartTag()方法返回值并且看在JSP页面上是否自定义Action元素,而不是怎样在TLD文件中去申明
在TLD文件中, 若<body-content>empty</body-content>的话,doStartTag()方法只能返回SKIP_BODY
body-content有三个可选值:empty , JSP , tagdependent
若没有设置的话,那么doStartTag()可以返回SKIP_BODY, EVAL_BODY_INCLUDE, or EVAL_BODY_BUFFERED.
返回值的说明:
若SKIP_BODY返回的情况下,body不会被evaluated并且doEndTag()被调用;
若EVAL_BODY_INCLUDE 返回,并且自定义action元素不为空的时候,那么doInitBody(),setBodyContent()不会被调用,而body evaluated并且"通过"当前的out对象,还有当action元素为空的时候,只有doStartTag(),doEndTag();
当EVAL_BODY_BUFFERED 返回,并且自定义的action元素不为空的时候,setBodyContent(),doInitBody()被调用,body被evaluated,doAfterBody()被调用,直到大于0次迭代后,doEndTag()才被调用,还有当action元素为空的时候,只有doStartTag(),doEndTag();
主题内容
1.自定义标记通常需要操控自己的主体内容,例如数据库查询需要将其主题内容解释为SQL
2.工作方法
servlet容器包含BodyContent对象栈,servlet容器在doStartTag()方法之后调用PageContext.pushBody(),就是说把当前的主体内容推入栈中,其中out变量重定向到当前的主体内容实例主题内容,保留一个到JspWriter对象的引用,即前一个输出,JspWriter将数据写入响应流中.这样就有效地创建了写入器栈
servlet容器是在调用标记的doAfterBody和doEndTag方法之间调用PageContent.popBody()方法的
注意请不要在doEndTag()后面去访问BodyContent,因为servlet容器在调用标记处理程序的doEndTag()方法为止,servlet容器可能已经再次使用了该标记的主题内容,使用doEndTag方法访问自己主体内容的标记,可能
相关文档:
四.曲线图
接着我们来介绍曲线图的使用。在笔者日常的开发工作中,曲线图用得最多,它可以用来绘制趋势图、统计分析等。首先我们在WebRoot下建立一个line目录,用来存放曲线图实例的jsp页面。我们在该目录下建立sample1.jsp页面来做一个简单的曲线图的例子。在开始编码前,让我们来看看与画曲线图密切相关的几个类:
1) ......
本地用的是tomcat6,运行一切都正常。把系统部到远程上时候报这个错误: Syntax error on token "<", invalid AssignmentOperator
Syntax error on token "<", invalid AssignmentOperator
在网上找到原因:
这个错误可能是因为你在jsp中用到了泛型。
把泛型去掉试试就 ......
jsp中Word打印
详细文字 详细图文
在jsp中引用response.setContentType("application/msword");,打开的页面就是word样式。
1、实现word横打:
<style>
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:841.9pt ......
一、基本概念: 1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的 2.标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。 3.标签库描述文件(Tag Libr ......
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="cl ......