【转】Struts1.x系列教程(6):Bean标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/18/251805.html
Bean标签库共有11个标签。这些标签可以完成如下五种工作:
1. 获得HTTP请求信息
2. 访问Java对象
3. 访问JSP内嵌对象和Struts配置对象
4. 访问Web资源和属性文件
5. 输出信息
下面我们就来分别介绍一下如何使用Bean标签库中的标签来完成上述的工作。
一、获得HTTP请求信息
使用Bean标签库中的标签可以访问Cookie、HTTP请求头以及请求参数。
1. <bean:cookie>标签
<bean:cookie>标签用于获得一个Cookie对象,并创建一个page范围的变量来保存这个Cookie对象。<bean:cookie>标签有三个常用属性:
(1)id:用于保存Cookie对象的变量名。
(2)name:Cookie名
(3)value:Cookie的默认值。如果name所指的Cookie不存在,<bean:cookie>标签就会创建一个新的Cookie对象,而value属性的值就是这个Cookie对象的value属性值。如果忽略value属性,当<bean:cookie>标签未找到name指写的Cookie时,就会抛出一个javax.servlet.jsp.JspException异常。因此,笔者建议在使用这个标签时加上value属性。
2. <bean:header>标签
<bean:header>标签用于获得HTTP请求头字段的值,并创建一个page范围的变量来保存请求头字段的值。<bean:header>标签有三个常用属性:
(1)id:用于保存HTTP请求头字段值的变量名。
(2)name:HTTP请求头字段名。
(3)value:HTTP请求头字段的默认值。如果name所指的HTTP请求头字段不存在,<bean:header>标签就会将value属性的值存在page范围的变量中。如果不指定value属性,且指定的HTTP请求头字段不存在时,<bean:header>标签就会抛出javax.servlet.jsp.JspException异常。
3. <bean:parameter>标签
<bean:parameter>标签用于获得HTTP请求参数的值,并创建一个page范围的变量来保存所获得的HTTP请求参数的值。<bean:parameter>标签有三个常用属性:
(1)id:用于保存HTTP请求参数值的变量名。
(2)name:HTTP请求参数名。
(3)value:HTTP请求参数值的默认值。如果name所指的HTTP请求参数不存在,<bean:parameter >标签就会将value属性的值存在page范围的变量中。如果不指定value属性,且指定的HTTP请求参数不存在时,<bean:parameter>标签就会抛出javax.servlet.jsp.JspException异常。
下面的例子演示了如何使用本节所讲的三个Bean标签来获得HTTP请求信息,在<samples工程目录>中建立一个httpRequestInfo.jsp文件,代码如下:
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>获得HTTP请求信息</title>
</head>
<body>
<%-- 测试bean:cookie标签 --%>
<bean:cookie id="myCookie" name="name" value="default" />
<%
if (myCookie.getValue().equals("default"))
{
Cookie cookie = new Cookie("name", "newCookie");
cookie.setMaxAge(1000);
response.addCookie(cookie);
}
%>
${myCookie.value} <%-- 用EL输出myCookie的value属性值 --%>
<%
// ${myCookie.value}相当于如下Java代码
Cookie cookie = (Cookie)pageContext.getAttribute("myCookie");
out.println(cookie.getValue());
%> <br>
<%-- 测试bean:header标签 --%>
<bean:header id="userAgent" name="user-agent" value="unknown"/>
${userAgent}<br> <%-- 用EL输出userAgent的值 --%>
<%-- 测试bean:parameter标签 --%>
<bean:parameter id="myCountry" name="country" value="unknown"/>
${myCountry} <%-- 用EL输出myCountry的值 --%>
</body>
</html>
在IE中输入如下的URL来测试httpRequestInfo.jsp:
http://localhost:8080/samples/httpRequestInfo.jsp?country=China
要注意的是,上述的三个Bean标签都将变量保存到了page范围内(也就是JSP内嵌对象pageContext中),并且不能改变变量的保存范围。读者在使用这三个Bean标签时应注意这一点。
二、访问Java对象
1. <bean:define>标签
<bean:define>标签用来将Java对象的属性值保存在变量中。<bean:define>标签有五个常用属性:
(1)id:变量名。
(2)name:Java对象名。
(3)property:Java对象属性名。
(4)scope:name所指的Java对象所在的访问,如果不指定,默认是page范围。
(5)toScope:id所指的变量要保存的范围,如果不指定,默认是page范围。
2. <bean:size>标签
<bean:size>标签用来获得集合(Map、Collection)或数组的长度。<bean:size>标签有两个常用的属性:
(1)id:一个Integer变量
(2)name:集合或数据的变量名。
下面的例子演示了如何使用本节所讲的两个Bean标签来访问Java对象。在<samples工程目录>目录中建立一个accessJavaObject.jsp文件,代码如下:
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>访问Java对象</title>
</head>
<body>
<%-- 建立actionform.HtmlTagsForm对象实例 --%>
<jsp:useBean id="htmlTagsForm" class="actionform.HtmlTagsForm"/>
<jsp:setProperty name="htmlTagsForm" property="name" value = "李宁"/>
<%-- 测试bean:define标签 --%>
<bean:define id="myBeanVar" name="htmlTagsForm" property="name"/>
${myBeanVar}
<%
String[] arr = new String[10];
pageContext.setAttribute("arr", arr);
%>
<%-- 测试bean:size标签 --%>
<bean:size id="length" name="arr"/>
${length}
</body>
</html>
在IE中输入如下的URL来测试accessJavaObject.jsp:
http://localhost:8080/samples/accessJavaObject.jsp
三、访问JSP内嵌对象和Struts配置对象
1. <bean:page>标签
<bean:page>标签用来建立一个page范围的变量,并可通过这个变量来访问JSP的内嵌对象。这个标签有两个属性:
(1)id:变量名。
(2)property:JSP内嵌对象名,必须是application、config,、request、response或session其中之一。
2. <bean:struts>标签
<bean:struts>标签用来建立一个page范围的变量,并可通过这个变量来访问Struts的三个配置对象。这个标签有四个属性:
(1)id:变量名。
(2)formBean:struts-config.xml文件中的<form-bean>标签的name属性值。如果指定这个属性,<bean:struts>会创建org.apache.struts.action.ActionFormBean类型的对象实例。
(3)mapping:struts-config.xml文件中的<action>标签的path属性值。如果指定这个属性,<bean:struts>会创建org.apache.struts.action.ActionMapping类型的对象实例。
(4)forward:struts-config.xml文件中的<global-forwards>标签的子标签<forward>的name属性值。如果指定这个属性,<bean:struts>会创建org.apache.struts.action.ActionForward类型的对象实例。
在使用<bean:struts>标签时应注意,在满足下面三种情况中的一种,<bean:struts>就会抛出异常:
(1)同时使用了formBean、mapping和forward中的两个或三个。
(2)未指定formBean、mapping和forward
(3)formBean、mapping或forward所指的标签不存在。
下面的例子演示了<bean:page>和<bean:struts>标签的使用方法,在<samples工程目录>目录中建立一个accessEmbeddedObject.jsp文件,代码如下:
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>访问JSP内嵌对象和Struts配置对象</title>
</head>
<body>
<bean:page id="myRequest" property="request" />
myRequest.characterEncoding = ${myRequest.characterEncoding}
<br>
myRequest.contextPath = ${myRequest.contextPath}
<%
out.println(myRequest.getParameter("abc"));
%>
<bean:struts id = "myHtmlTagsForm" formBean="htmlTagsForm"/><br>
myHtmlTagsForm.type = ${myHtmlTagsForm.type}<br>
myHtmlTagsForm.getClass() = ${myHtmlTagsForm.class}
<bean:struts id = "myHtmlTags" mapping="/htmlTags"/><br>
myHtmlTags.type = ${myHtmlTags.type}<br>
myHtmlTags.getClass() = ${myHtmlTags.class}
<bean:struts id = "myNewProduct" forward="newProduct"/><br>
myNewProduct.path = ${myNewProduct.path}<br>
myNewProduct.getClass() = ${myNewProduct.class}
</body>
</html>
四、访问Web资源和属性文件
1. <bean:include>标签
<bean:include>标签用于获得相对或绝对路径的Web资源,并将这些资源的内容保存到page范围的变量中。<bean:include>标签有四个常用的属性:
(1)id:变量名。
(2)href:Web资源的绝对路径。
(3)page:Web资源的相对路径。以“/”开头。
(4)forward:struts-config.xml文件<global-forwards>元素的子元素<forward>的name属性值。如果指定这个属性,<bean:include>标签会自动获得<forward>的path属性所指的Web资源的内容。
2. <bean:resource>标签
<bean:resource>标签和<bean:include>标签类似,也用来获得Web资源的内容,但和<bean:include>的不同之处是<bean:resource>在访问Web资源时(如JSP页面),并不执行这个JSP页面,而是将整个JSP页面的原始内容保存到变量中,而<bean:include>在访问这个JSP页面时,会先执行这个JSP页面,然后将JSP页面执行后的结果保存在变量中。因此,使用<bean:include>访问Web资源和在IE中输入相应的URL的效果是一样的。而<bean:resource>获得的是JSP页面的源代码。
<bean:resource>标签有三个属性:
(1)id:变量名。
(2)name:Web资源的相对路径。以“/”开头。
(3)input:如果指定input属性,id变量为java.io.InputStream类型,如果未指定input属性,id变量为String类型。
3. <bean:message>标签
<bean:message>标签用于从Java属性文件中获得字符串信息。要注意的是,<bean:message>标签获得字符串信息后,并不将所获得的信息保存在变量中,而是将其直接输出,也就是在执行JSP页面时,在生成客户端内容时,<bean:message>标签会被属性文件中的字符串信息代替。<bean:message>标签的常用属性如下:
(1)key:属性文件中的字符串信息键名。
(2)bundle:struts-config.xml文件中的<message-resources>标签的key值属值。如果不指定bundle属性,就使用默认的属性文件。
(3)name:用于获得键名的字符串变量名或对象实例变量名。<bean:message>标签除了从key属性中获得键名,还可以通过将key保存在指定范围的变量中,然后通过name属性获得这个key。
(4)property:获得key的属性名。如果name属性为对象实例变量名,则<bean:message>标签会从property所指的属性中获得key。
(5)scope:<bean:message>标签获得name变量的范围。默认值是page。
(6)arg0
~ arg4:用于向带参数的字符串信息中传入参数值。分别对应于属性文件中的{0} ~ {4}。
下面的例子演示了本节所涉及到的三个标签的使用方法。在运行这个例子之前,先在<samples工程目录>"src"struts目录中建立一个MyResources.properties文件,并输入如下的内容:
myGreet = hello {0}
然后在struts-config.xml中的<struts-config>元素中添加如下的子标签:
最后在<samples工程目录>中建立一个accessResources.jsp文件,代码如下:
<%@ page import="actionform.HtmlTagsForm"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>访问Web资源和属性文件</title>
</head>
<body>
<bean:include id="myWebVar1"
href="http://localhost:8080/samples/simpleValidation.jsp" />
<bean:include id="myWebVar2" page="/htmlTags.jsp" />
<bean:include id="myWebVar3" forward="newProduct" />
${myWebVar1} ${myWebVar2} ${myWebVar3}
<bean:resource id="myResVar" name="/htmlTags.jsp" />
${myResVar}
<%-- 从MyResources.properties中获得信息 --%>
<bean:message bundle="my" key="greet" />
<%-- 从ErrorDescription.properties中获得信息 --%>
<bean:message key="error.email.invalid" />
<bean:message bundle="my" key="myGreet" arg0="李宁" />
<%
request.setAttribute("newGreet", "greet");
%>
<bean:message bundle="my" name="newGreet" />
<%
HtmlTagsForm form = new HtmlTagsForm();
form.setName("myGreet");
request.setAttribute("form", form);
%>
<%-- 从form对象的name属性获得key --%>
<bean:message bundle="my" name="form" property="name" arg0="李宁" />
</body>
</html>
在IE中输入如下的URL来测试accessResources.jsp:
http://localhost:8080/samples/accessResources.jsp
五、使用<bean:write>标签输出信息
<bean:write>用于输出字符串变量及对象变量的属性值。<bean:write>有如下六个常用的属性:
1. name:变量名(包括字符串变量或对象变量)。
2. property:如果name是对象变量,property表示name对象的属性。
3. filter:是否过滤输出内容中的HTML元素。如果filter为true,输出内容中的所有的HTML元素的敏感符号都会被替换成相应的字符串(如“<”被替换成了“<”,“>”被替换成了“>”)。
4. format:用于格式化输出内容的格式化字符串。
5. formatKey:保存在属性文件中的格式化字符串的key。
6. scope:name变量保存的范围。默认是page范围。
下面的例子演示了<bean:write>的常用方法。在运行这个例子之前,在<samples工程目录>"src"struts"MyResources.properties文件中加入如下的内容:
在<samples工程目录>目录中建立一个beanWrite.jsp文件,代码如下:
<%@page import="actionform.HtmlTagsForm,java.util.*"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>测试bean:write</title>
</head>
<body>
<%
request.setAttribute("abcd", "myValue");
HtmlTagsForm form = new HtmlTagsForm();
form.setName("hello");
form.setWork("<b>工程师</b>");
request.setAttribute("form", form);
Calendar calendar = Calendar.getInstance();
request.setAttribute("calendar", calendar);
%>
<bean:write name="abcd" /><br>
<bean:write name="form" property="name" /><br>
<bean:write name="form" property="work" /><br>
<bean:write name="form" property="work" filter="false" /><br>
<bean:write name="calendar" property="time" format="yyyy-MM-dd HH:mm:ss" /><br>
<bean:write name="calendar" property="time"formatKey="formatDate" bundle="my" />
</body>
</html>
在IE中输入如下的URL来测试beanWrite.jsp:
http://localhost:8080/samples/beanWrite.jsp
如果读者想了解关于bean标签库的更详细的信息,也可以访问官方的网站,URL如下:
http://struts.apache.org/1.2.9/userGuide/struts-bean.html
【转】Struts1.x系列教程(6):Bean标签库的更多相关文章
- 【转】Struts1.x系列教程(4):标签库概述与安装
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- Spring 系列教程之自定义标签的解析
Spring 系列教程之自定义标签的解析 在之前的章节中,我们提到了在 Spring 中存在默认标签与自定义标签两种,而在上一章节中我们分析了 Spring 中对默认标签的解析过程,相信大家一定已经有 ...
- Spring 系列教程之默认标签的解析
Spring 系列教程之默认标签的解析 之前提到过 Spring 中的标签包括默认标签和自定义标签两种,而两种标签的用法以及解析方式存在着很大的不同,本章节重点带领读者详细分析默认标签的解析过程. 默 ...
- JSTL标签库的基本教程之核心标签库(二)
JSTL标签库的基本教程之核心标签库(二) 核心标签库 标签 描述 <c:out> 用于在JSP中显示数据,就像<%= ... > <c:set> 用于保存数据 & ...
- 【转】Struts1.x系列教程(7):Logic标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 【转】Struts1.x系列教程(5):HTML标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- [转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法, ...
- 菜鸟学习Struts——bean标签库
一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...
- JSTL标签库的基本教程之核心标签库(一)
JSTL介绍 Java Server Pages Standard Tag Libray(JSTL):JSP标准标签库,它封装了JSP应用的通用核心功能.JSTL支持通用的.结构化的任务,比如迭代,条 ...
随机推荐
- jq遍历url判断是否为当前页面然后给导航上色
举例:我们希望在此页面点击“我的头像”从而加亮它的背景颜色,跟“我的爱好”的背景颜色一样. 之前: 之后: 我是这样实现的:通过判断当前url是否存在某字段,遍历字段所在的位置给加上相应的样式,我这么 ...
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...
- 你应了解的4种JS设计模式
学习地址: http://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651223556&idx=1&sn=8cd7a2272 ...
- python操作Excel读写--使用xlrd和xlwt
一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 进入到解压文件路径,输入 setup.py ...
- readyState0 1 2 3 4..
0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头). 3:请求在处理中:通常响 ...
- Object对象类
Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什 ...
- A trip through the Graphics Pipeline 2011_10_Geometry Shaders
Welcome back. Last time, we dove into bottom end of the pixel pipeline. This time, we’ll switch ...
- ios-WKWebView 拨打电话
-(void)webView:(WKWebView* )webView didStartProvisionalNavigation:(WKNavigation* )navigation { NSStr ...
- 《MongoDB 权威指南》 学习总结
书目 http://baike.baidu.com/link?url=DVJuvrT4ssbM8V1pKcoRx5H1CwRRCynC6_Ix6YWIrr414opislflpPuY9hRDO4g ...
- 【翻译】How To Tango With Django 1.5.4 第五章
5数据模型和数据库 一个模型就是一个描述你数据表的python对象.不用再通过SQL来操作数据库,而是使用python对象来操作数据库. 5.1rango要求 ...一个目录下面有多个下面 ...一个 ...