7.3.4 attribute指令

7.3.4 attribute指令

attribute用于设定tag file中标签的属性。它和标签库描述文件中的attribute元素等效

attribute指令语法

下面是该指令的语法:

1
<%@ attribute attributeName1="value1" attributeName2="value2" ... %>

attribute指令的属性

attribute指令的属性如下表所示。其中只有name属性是必须的。

属性 描述
name 用于设定该属性的名称。在一个tag file中,每个属性的名称必须是唯一的
required 用于设定该属性是否是必须的。值可以取truefalse,默认值为flase
fragment 用于设定该属性是否是fragment。默认值为false
rtexprvalue 用于设定该属性的值是否在运行时被动态计算。值可以取truefalse,默认值为true
type 用于设定该属性的类型,默认值为java.lang.String
description 用于设定该属性的描述信息,当鼠标放在该标签体上时会显示信息,类似于javadoc文档

实例

encode.tag文件可用于对一个字符串进行HTML编码。这个encode标签定义了一个input属性,该属性的类型是java.lang.String

encode.tag文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!-- 调用该自定义标签需要传入名为input的参数 -->
<%@ attribute name="input" required="true"%>
<!-- 声明一个方法 -->
<%!private String encodeHtmlTag(String tag)
{
if(tag == null) {
return null;
}
int length = tag.length();
StringBuilder encodedTag =
new StringBuilder(2 * length);
for(int i = 0;i < length;i++) {
char c = tag.charAt(i);
//如果是小于号
if(c == '<') {
//不加入这个符号
//加入转移符
//也可以说成:替换成对应的转移符
encodedTag.append("&lt");
} else if(c == '>') {
encodedTag.append("&gt");
} else if(c == '&') {
encodedTag.append("&amp");
} else if(c == '"') {
encodedTag.append("&qout");
} else if(c == ' ') {
encodedTag.append("&nbsp");
} else {
//不需要转义
encodedTag.append(c);
}
}
return encodedTag.toString();
}%>
<!-- 使用JSP表达式调用 -->
<%=encodeHtmlTag(input)%>

encodeTagTest.jsp使用了encode.tag定义的标签。

encodeTagTest.jsp文件

1
2
3
4
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="easy" tagdir="/WEB-INF/tags"%>
<easy:encode input="<strong>对不起,你加粗不了我</strong>" />

浏览器显示

可以通过以下URL来查看encodeTagTest.jsp 页面的效果:
http://localhost:8080/app07a/encodeTagTest.jsp
浏览器将显示下列文本:

1
<strong>对不起,你加粗不了我</strong>