其实以前也有写过自定义标签, 但是没有注意到过<rtexprvalue>的用法, 最近这几天又用上自定义标签了, 突然发现<rtexprvalue>的用法是有讲究的.
rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否可以使用JSP表达式.
当在<attribute>标签里指定<rtexprvalue>true</rtexprvalue>时, 表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定, example as follow:
<sql:query var="result" >
select * from mytable order by nameid
</sql:query>
<%request.setAttribute("nameid", "2"); %>
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>
<myTag:cupSize cupSize="${nameid}" cupSizes="${result}"></myTag:cupSize>
当在<attribute>标签里指定<rtexprvalue>false</rtexprvalue>时, 表示该自定义标签的某属性的值只能直接指定, example as follow:
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>
(部分内容转自: http://www.blogjava.net/echo/archive/2007/10/14/152821.html)
simple.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>s</short-name>
<uri>/simple</uri>
<tag>
<name>url</name>
<tag-class>core.ui.UrlTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>form</name>
<tag-class>core.ui.FormTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>application</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>service</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>event</name>
<tag-class>core.ui.EventTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>event</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
此tld文件可直接放在src文件的META-INFO目录中.这样就可避免在web.xml中再次设置tld的路径.
对应的java文件.
package core.ui;
import java.io.IOException;
import java.io.Writer;
import javax.servlet.jsp.JspException;
public class TagBuilder {
private static final String SEP = " ";
//StringBuilder is not syschronize.
StringBuilder builder = new StringBuilder(100);
String name = null;
/**
*
* 銈炽兂銈广儓銉┿偗銈裤兗銆?
* @param name 鏍囩鐨勫悕瀛?
*/
public TagBuilder(String name) {
this();
this.name = name;
builder.append("<").append(name);
}
public TagBuilder() {
builder.append(SEP);
}
/**
* 娣诲姞灞炴€т俊鎭?
* @param name 灞炴€у悕
* @param v 灞炴€у€?
* @return
*/
public TagBuilder appendAttribute(String name, String v) {
builder.append(SEP);
// \" 浠h〃 "
builder.append(name).append("=").append("\"").append(v == null ? "" : v).append("\"");
return this;
}
/**
* 缁撴潫灞炴€т俊鎭坊鍔?
* @return
*/
public TagBuilder endAppendAttribute() {
builder.append(">");
return this;
}
/**
* 娣诲姞鏍囩涓棿鐨勫€煎: <label>label<label>
* @param v
* @return
*/
public TagBuilder append(String v) {
builder.append(v == null ? "" : v);
return this;
}
/**
* 缁撴潫鏍囩
* @param simple
* @return
*/
public TagBuilder endTag(boolean simple) {
if (simple) {
builder.append(" />");
} else {
if (name == null)
throw new IllegalArgumentException();
builder.append("</").append(name).append(">");
}
return this;
}
/**
* 杈撳嚭鏍囩鍐呭
* @param writer
* @throws JspException
*/
public void writeTo(Writer writer) throws JspException {
try {
writer.write(builder.toString());
} catch (IOException e) {
throw new JspException("IO Error", e);
}
}
public String toString() {
return builder.toString();
}
}
package core.ui;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class UrlTag extends TagSupport{
private static final long serialVersionUID = 6920029415011588731L;
String value = null;
/**
* value傪庢摼偡傞丅
* @return value
*/
public String getValue() {
return value;
}
/**
* value傪愝掕偡傞丅
* @param value value
*/
public void setValue(String value) {
this.value = value;
}
public UrlTag() {}
@Override
public int doEndTag() throws JspException {
if (value == null) throw new JspException();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
String context = request.getContextPath();
if (context.length() > 1) {
value = context + value;
}
try {
pageContext.getOut().write(value);
} catch (IOException e) {
throw new JspException("IO Exception", e);
}
return EVAL_PAGE;
}
@Override
public void release() {
value = null;
super.release();
}
}
部分源代码:
分享到:
相关推荐
通过分析这些文件,我们可以了解到这个模板引擎示例可能是用ASP.NET实现的,使用了自定义的标签解析机制,并且提供了演示和说明以便理解和使用。开发者可以通过阅读和研究这些源码,学习如何创建自己的模板引擎,...
1. **属性处理**:确保正确解析和处理标签的属性,这可能涉及到类型转换、默认值设定等。 2. **标签体内容**:如果标签有内容(即`内容</mytags:customTag>`),需要在Java类中通过`doAfterBody()`方法处理。 3. **...
本压缩包中的"商业编程-源码-模板引擎(标签解析)示例源码"提供了对这一概念的具体实现,帮助我们深入理解模板引擎的工作原理和实际应用。 模板引擎的核心功能是标签解析,即识别并处理模板文件中的特定标记或指令...
压缩包中的 "JfreeTag" 文件可能是包含 JSP 标签实现的源码,包括标签的定义、属性处理、数据解析以及 JFreeChart 对象的创建和渲染。通过查看和学习这个源码,你可以了解如何将 JFreeChart 与 JSP 标签库结合,为...
以下是一个简单的SAX解析示例: ```java import org.xml.sax.helpers.DefaultHandler; class MyHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String ...
- `<jsp:useBean>`与`<c:set>`结合使用,可以将值设置到JavaBean的属性中。 ```jsp <jsp:useBean id="stu" class="net.pcedu.student"/> ${stu}" property="age"/> ``` 综上所述,JSTL通过提供一系列标准标签,极...
本教程将深入探讨JSP标签技术,特别是自定义标签的使用。 1. **JSP标准标签库(JSTL)** JSTL是Java社区为了统一JSP标签库而提出的标准,包括了Core、XML、JDBC、Format和Function五个核心标签库。Core库提供了...
标签文件是一个JSP片段,包含在自定义标签中,当标签被解析时,它的内容会被插入到JSP页面相应的位置。 二、自定义标签简介 2.1 自定义标签概念 自定义标签是JSP的一种扩展,它允许开发者定义自己的标签库,实现...
本示例"jsp图片上传完整示例"就是一种实现此类功能的实际操作,它基于经典的Struts框架和Hibernate ORM工具,提供了一个可直接运行的解决方案。下面我们将深入探讨这个知识点。 首先,JSP(JavaServer Pages)是一...
- 如果JSP文件中包含动态引入的资源(如JSP标签库),可能需要调整`wljar`命令的`-classpath`参数以包含这些依赖项。 - 预编译适用于静态内容多、改动少的JSP应用。对于经常变动的JSP页面,可能需要权衡预编译带来的...
本资料包“JSP标签、自定义标签,含有属性”专注于讲解JSP中的两种主要标签类型:标准动作标签(JSP Standard Tags, JSTL)和自定义标签。 1. **JSP标准动作标签**: JSTL是一组符合JSR-52标准的标签库,包括核心...
### jsp自定义嵌套标签:定义与使用详解 在JavaServer Pages(JSP)技术中,自定义标签是扩展其功能的一种强大手段。而自定义嵌套标签,则是在此基础上进一步提升灵活性和重用性的机制。本文将深入探讨自定义嵌套...
**三、示例解析** "jsp 2.0自定义标签.doc"文件很可能包含了一个关于如何创建和使用自定义标签的详细教程。它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档...
当JSP页面解析到自定义标签时,会调用这些类中的方法来执行相应的逻辑。 3. **在JSP页面中使用自定义标签** 在JSP页面中,可以像使用HTML标签一样使用自定义标签,只需在开始和结束位置加上定义好的标签名称,并...
综上所述,"hiro之JSP标签共3页.pdf.zip"这份文档很可能是介绍JSP标签的使用方法、示例以及最佳实践,覆盖了自定义标签和JSTL的核心内容。通过学习这部分知识,开发者可以更高效地构建JSP应用程序。
### jsp标签库详解 #### 引言 JSP(JavaServer Pages)是一种服务器端的脚本技术,用于生成动态Web页面。...通过本文的深入解析,希望读者能够更好地理解和运用JSP标签库,从而在实际项目中发挥其最大效能。
`web.xml` 是应用的部署描述符,其中可能包含了对自定义标签库的注册,确保在服务器启动时能正确加载和解析TLD文件。通过`<jsp-config>`元素下的`taglib`子元素,可以指定TLD文件的位置和标签库的URI。 `QQ截图...