java

位置:IT落伍者 >> java >> 浏览文章

Struts1.x系列教程(6):Bean标签库


发布日期:2023年12月23日
 
Struts1.x系列教程(6):Bean标签库

Bean标签库共有个标签这些标签可以完成如下五种工作

获得HTTP请求信息

访问Java对象

访问JSP内嵌对象和Struts配置对象

访问Web资源和属性文件

输出信息

下面我们就来分别介绍一下如何使用Bean标签库中的标签来完成上述的工作

获得HTTP请求信息

使用Bean标签库中的标签可以访问CookieHTTP请求头以及请求参数

<beancookie>标签

<beancookie>标签用于获得一个Cookie对象并创建一个page范围的变量来保存这个Cookie对象<beancookie>标签有三个常用属性

)id用于保存Cookie对象的变量名

)nameCookie名

)valueCookie的默认值如果name所指的Cookie不存在<beancookie>标签就会创建一个新的Cookie对象而value属性的值就是这个Cookie对象的value属性值如果忽略value属性当<beancookie>标签未找到name指写的Cookie时就会抛出一个javaxservletjspJspException异常因此笔者建议在使用这个标签时加上value属性

<beanheader>标签

<beanheader>标签用于获得HTTP请求头字段的值并创建一个page范围的变量来保存请求头字段的值<beanheader>标签有三个常用属性

)id用于保存HTTP请求头字段值的变量名

)nameHTTP请求头字段名

)valueHTTP请求头字段的默认值如果name所指的HTTP请求头字段不存在<beanheader>标签就会将value属性的值存在page范围的变量中如果不指定value属性且指定的HTTP请求头字段不存在时<beanheader>标签就会抛出javaxservletjspJspException异常

<beanparameter>标签

<beanparameter>标签用于获得HTTP请求参数的值并创建一个page范围的变量来保存所获得的HTTP请求参数的值<beanparameter>标签有三个常用属性

)id用于保存HTTP请求参数值的变量名

)nameHTTP请求参数名

)valueHTTP请求参数值的默认值如果name所指的HTTP请求参数不存在<beanparameter >标签就会将value属性的值存在page范围的变量中如果不指定value属性且指定的HTTP请求参数不存在时<beanparameter>标签就会抛出javaxservletjspJspException异常

下面的例子演示了如何使用本节所讲的三个Bean标签来获得HTTP请求信息在<samples工程目录>中建立一个文件代码如下

<%@pagepageEncoding=GBK%>

<%@tagliburi=beanprefix=bean%>

<html>

<head>

<title>获得HTTP请求信息</title>

</head>

<body>

<%测试bean:cookie标签%>

<bean:cookieid=myCookiename=namevalue=default/>

<%

if(myCookiegetValue()equals(default))

{

Cookiecookie=newCookie(namenewCookie);

cookiesetMaxAge();

responseaddCookie(cookie);

}

%>

${myCookievalue}<%用EL输出myCookie的value属性值%>

<%

//${myCookievalue}相当于如下Java代码

Cookiecookie=(Cookie)pageContextgetAttribute(myCookie);

outprintln(cookiegetValue());

%><br>

<%测试bean:header标签%>

<bean:headerid=userAgentname=useragentvalue=unknown/>

${userAgent}<br><%用EL输出userAgent的值%>

<%测试bean:parameter标签%>

<bean:parameterid=myCountryname=countryvalue=unknown/>

${myCountry}<%用EL输出myCountry的值%>

</body>

</html>

在IE中输入如下的URL来测试

//localhost/samples/?country=China

要注意的是上述的三个Bean标签都将变量保存到了page范围内(也就是JSP内嵌对象pageContext中)并且不能改变变量的保存范围读者在使用这三个Bean标签时应注意这一点

访问Java对象

<beandefine>标签

<beandefine>标签用来将Java对象的属性值保存在变量中<beandefine>标签有五个常用属性

)id变量名

)nameJava对象名

)propertyJava对象属性名

)scopename所指的Java对象所在的访问如果不指定默认是page范围

)toScopeid所指的变量要保存的范围如果不指定默认是page范围

<beansize>标签

<beansize>标签用来获得集合(MapCollection)或数组的长度<beansize>标签有两个常用的属性

)id一个Integer变量

)name集合或数据的变量名

下面的例子演示了如何使用本节所讲的两个Bean标签来访问Java对象在<samples工程目录>目录中建立一个accessJavaObjectjsp文件代码如下

<%@pagepageEncoding=GBK%>

<%@tagliburi=beanprefix=bean%>

<html>

<head>

<title>访问Java对象</title>

</head>

<body>

<%建立actionformHtmlTagsForm对象实例%>

<jsp:useBeanid=htmlTagsFormclass=actionformHtmlTagsForm/>

<jsp:setPropertyname=htmlTagsFormproperty=namevalue=李宁/>

<%测试bean:define标签%>

<bean:defineid=myBeanVarname=htmlTagsFormproperty=name/>

${myBeanVar}

<%

String[]arr=newString[];

pageContextsetAttribute(arrarr);

%>

<%测试bean:size标签%>

<bean:sizeid=lengthname=arr/>

${length}

</body>

</html>

在IE中输入如下的URL来测试accessJavaObjectjsp

访问JSP内嵌对象和Struts配置对象

<beanpage>标签

<beanpage>标签用来建立一个page范围的变量并可通过这个变量来访问JSP的内嵌对象这个标签有两个属性

)id变量名

)propertyJSP内嵌对象名必须是applicationconfigrequestresponse或session其中之一

<beanstruts>标签

<beanstruts>标签用来建立一个page范围的变量并可通过这个变量来访问Struts的三个配置对象这个标签有四个属性

)id变量名

)formBeanstrutsconfigxml文件中的<formbean>标签的name属性值如果指定这个属性<beanstruts>会创建orgapachestrutsactionActionFormBean类型的对象实例

)mappingstrutsconfigxml文件中的<action>标签的path属性值如果指定这个属性<beanstruts>会创建orgapachestrutsactionActionMapping类型的对象实例

)forwardstrutsconfigxml文件中的<globalforwards>标签的子标签<forward>的name属性值如果指定这个属性<beanstruts>会创建orgapachestrutsactionActionForward类型的对象实例

在使用<beanstruts>标签时应注意在满足下面三种情况中的一种<beanstruts>就会抛出异常

)同时使用了formBeanmapping和forward中的两个或三个

)未指定formBeanmapping和forward

)formBeanmapping或forward所指的标签不存在

下面的例子演示了<beanpage>和<beanstruts>标签的使用方法在<samples工程目录>目录中建立一个accessEmbeddedObjectjsp文件代码如下

<%@pagepageEncoding=GBK%>

<%@tagliburi=beanprefix=bean%>

<html>

<head>

<title>访问JSP内嵌对象和Struts配置对象</title>

</head>

<body>

<bean:pageid=myRequestproperty=request/>

myRequestcharacterEncoding=${myRequestcharacterEncoding}

<br>

ntextPath=${ntextPath}

<%

outprintln(myRequestgetParameter(abc));

%>

<bean:strutsid=myHtmlTagsFormformBean=htmlTagsForm/><br>

myHtmlTagsFormtype=${myHtmlTagsFormtype}<br>

myHtmlTagsFormgetClass()=${myHtmlTagsFormclass}

<bean:strutsid=myHtmlTagsmapping=/htmlTags/><br>

myHtmlTagstype=${myHtmlTagstype}<br>

myHtmlTagsgetClass()=${myHtmlTagsclass}

<bean:strutsid=myNewProductforward=newProduct/><br>

myNewProductpath=${myNewProductpath}<br>

myNewProductgetClass()=${myNewProductclass}

</body>

</html>

访问Web资源和属性文件

<beaninclude>标签

<beaninclude>标签用于获得相对或绝对路径的Web资源并将这些资源的内容保存到page范围的变量中<beaninclude>标签有四个常用的属性

)id变量名

)hrefWeb资源的绝对路径

)pageWeb资源的相对路径/开头

)forwardstrutsconfigxml文件<globalforwards>元素的子元素<forward>的name属性值如果指定这个属性<beaninclude>标签会自动获得<forward>的path属性所指的Web资源的内容

<beanresource>标签

<beanresource>标签和<beaninclude>标签类似也用来获得Web资源的内容但和<beaninclude>的不同之处是<beanresource>在访问Web资源时(如JSP页面)并不执行这个JSP页面而是将整个JSP页面的原始内容保存到变量中而<beaninclude>在访问这个JSP页面时会先执行这个JSP页面然后将JSP页面执行后的结果保存在变量中因此使用<beaninclude>访问Web资源和在IE中输入相应的URL的效果是一样的而<beanresource>获得的是JSP页面的源代码

<beanresource>标签有三个属性

)id变量名

)nameWeb资源的相对路径/开头

)input如果指定input属性id变量为javaioInputStream类型如果未指定input属性id变量为String类型

<beanmessage>标签

<beanmessage>标签用于从Java属性文件中获得字符串信息要注意的是<beanmessage>标签获得字符串信息后并不将所获得的信息保存在变量中而是将其直接输出也就是在执行JSP页面时在生成客户端内容时<beanmessage>标签会被属性文件中的字符串信息代替<beanmessage>标签的常用属性如下

)key属性文件中的字符串信息键名

)bundlestrutsconfigxml文件中的<messageresources>标签的key值属值如果不指定bundle属性就使用默认的属性文件

)name用于获得键名的字符串变量名或对象实例变量名<beanmessage>标签除了从key属性中获得键名还可以通过将key保存在指定范围的变量中然后通过name属性获得这个key

)property获得key的属性名如果name属性为对象实例变量名则<beanmessage>标签会从property所指的属性中获得key

)scope<beanmessage>标签获得name变量的范围默认值是page

)arg ~ arg用于向带参数的字符串信息中传入参数值分别对应于属性文件中的{} ~ {}

下面的例子演示了本节所涉及到的三个标签的使用方法在运行这个例子之前先在<samples工程目录>srcstruts目录中建立一个MyResourcesproperties文件并输入如下的内容

greet=helloworld

myGreet=hello{}

然后在strutsconfigxml中的<strutsconfig>元素中添加如下的子标签

<messageresourcesparameter=strutsMyResourceskey=my/>

最后在<samples工程目录>中建立一个accessResourcesjsp文件代码如下

<%@pagepageEncoding=GBK%>

<%@pageimport=actionformHtmlTagsForm%>

<%@tagliburi=beanprefix=bean%>

<html>

<head>

<title>访问Web资源和属性文件</title>

</head>

<body>

<bean:includeid=myWebVar

/>

<bean:includeid=myWebVarpage=/htmlTagsjsp/>

<bean:includeid=myWebVarforward=newProduct/>

${myWebVar}${myWebVar}${myWebVar}

<bean:resourceid=myResVarname=/htmlTagsjsp/>

${myResVar}

<%从MyResourcesproperties中获得信息%>

<bean:messagebundle=mykey=greet/>

<%从ErrorDescriptionproperties中获得信息%>

<bean:messagekey=erroremailinvalid/>

<bean:messagebundle=mykey=myGreetarg=李宁/>

<%

requestsetAttribute(newGreetgreet);

%>

<bean:messagebundle=myname=newGreet/>

<%

HtmlTagsFormform=newHtmlTagsForm();

formsetName(myGreet);

requestsetAttribute(formform);

%>

<%从form对象的name属性获得key%>

<bean:messagebundle=myname=formproperty=namearg=李宁/>

</body>

</html>

在IE中输入如下的URL来测试accessResourcesjsp

使用<beanwrite>标签输出信息

<beanwrite>用于输出字符串变量及对象变量的属性值<beanwrite>有如下六个常用的属性

name变量名(包括字符串变量或对象变量)

property如果name是对象变量property表示name对象的属性

filter是否过滤输出内容中的HTML元素如果filter为true输出内容中的所有的HTML元素的敏感符号都会被替换成相应的字符串(如<被替换成了&lt>被替换成了&gt

format用于格式化输出内容的格式化字符串

formatKey保存在属性文件中的格式化字符串的key

scopename变量保存的范围默认是page范围

下面的例子演示了<beanwrite>的常用方法在运行这个例子之前在<samples工程目录>srcstrutsMyResourcesproperties文件中加入如下的内容

formatDate=yyyyMMddhh:mm:ss

在<samples工程目录>目录中建立一个beanWritejsp文件代码如下

<%@pagepageEncoding=GBK%>

<%@pageimport=actionformHtmlTagsFormjavautil*%>

<%@tagliburi=beanprefix=bean%>

<html>

<head>

<title>测试bean:write</title>

</head>

<body>

<%

requestsetAttribute(abcdmyValue);

HtmlTagsFormform=newHtmlTagsForm();

formsetName(hello);

formsetWork(<b>工程师</b>);

requestsetAttribute(formform);

Calendarcalendar=CalendargetInstance();

requestsetAttribute(calendarcalendar);

%>

<bean:writename=abcd/><br>

<bean:writename=formproperty=name/><br>

<bean:writename=formproperty=work/><br>

<bean:writename=formproperty=workfilter=false/><br>

<bean:writename=calendarproperty=timeformat=yyyyMMddHH:mm:ss/><br>

<bean:writename=calendarproperty=timeformatKey=formatDatebundle=my/>

</body>

</html>

在IE中输入如下的URL来测试beanWritejsp

如果读者想了解关于bean标签库的更详细的信息也可以访问官方的网站URL如下

l

               

上一篇:开发框架:深入了解 Struts Validator

下一篇:Jakarta Struts学习之实战演示