Bean标签大致有以下几个特点
id属性:定义一个变量,默认情况下,这个变量被存取在Page范围内,对于<bean:define>标签,他的toScope属性可以指定这个变量的存放范围,可选值有:page,request,session,application。
name属性:指定已经存在的JavaBean的名字,property属性指定这个JavaBean的某个属性。scope属性指定这个JavaBean的范围,可选值包括:page,request,session,application.如果没有设置scope属
性,将依次从page,request,session,application中寻找JavaBean.
在Bean标签库中,使用最频繁的标签为<bean:message>和<bean:write>,<bean:message>输出属性文件中的一条消息,<bean:write>输出某个Bean或者其属性。
访问HTTP请求信息或JSP隐含对象
<bean:cookie>:访问Cookie信息
<bean:header>:访问HTTP请求中的Header信息。
<bean:parameter>:访问请求参数。
<bean:page>:访问JSP隐含对象。
<bean:header>标签,用于检索HTTP请求中的Header信息。其中
id属性:定义一个java.lang.String类型的变量,这个变量存放在page范围内。
name属性:指定需要检索的Header的信息。
<bean:header id="lang" name="Accept-Language"/>
<bean:write name="lang">
在以上代码中,标签检索HTTP请求Header中的“Accept-Language”信息。然后以Java.lang.String字符串类型放入page范围内,然后使用<bean:write>标签输出。
<bean:page>标签用于检索JSP隐含对象,如session,request,response等
<bean:page>标签具有以下属性。
id属性:定义一个引用隐含对象的变量,这个变量存放在page范围内。
property属性:指定隐含对象的名字,可选值包含application,config,request,response和session。
<bean:page id="this_session" property="session">
<bean:write name="this_session" property="creationTime">
以上代码的<bean:page>标签定义了一个名为"this_session"的变量。他引用JSP网页的session隐含对象。接下来<bean:write>标签输出this_session变量的creationTime属性。
<bean:parameter>标签用于检索HTTP请求参数,他具有以下属性
id属性:定义一个Java.lang.String类型的变量,这个变量存放page范围内。
name属性:指定请求参数名。
value属性:指定请求参数的默认值。
<bean:parameter id="para" name="values" value="nulls"/>
<bean:write name="para"/>
http://localhost:1010/strutss/beans/MyJsp.jsp?values=1
输出结果1
http://localhost:1010/strutss/beans/MyJsp.jsp
输出结果为默认值
nulls
如果检索下面地址中同名参数,例如:
http://localhost:1010/strutss/beans/MyJsp.jsp?values=1&values=2&values=3
<bean:parameter>标签中multiple属性(可以设置为任意一个字符串)此时id不再是java.long.String变量而是一个字符串类型数组。
<bean:parameter id="para2" name="values" value="nulls" multiple=""/>
<%
for(int i=0;i<para2.length;i++)
{
out.println(para2[i]);
}
%>
输出结果为1 2 3
定义或者输出JavaBean
<bean:write>标签用于在网页上输出某个Bean或他的属性的内容。
<bean:wtite name="uses"/>
<bean:write>标签中的Name属性指定已经存在的变量。
如果uses为某个Bean,想输出Bean中的某个属性,需要使用property属性
<bean:wtite name="uses" property="userName"/>
<bean:wtite>标签中format格式化输出。
<%
request.setAttribute("time",new Date());
request.setAttribute("price",new Double(2000.34));
%>
<bean:write name="time" format="MM-dd-yyyy"/>
<bean:write name="price" format="####.###"/>
如果是普遍现象,我们可以在资源文件(在struts-config.xml的message-resources节点配置)里设置org.apache.struts.taglib.bean.format.float=0,000.00 ,当然实际处理时format属性是优先的。
也就是说,如果format属性存在,bean:write将用format属性值进行格式化,否则用默认的org.apache.struts.taglib.bean.format.float的值格式化。
此类格式化参数有:
格式化参数 适用类型(黑体表示)
org.apache.struts.taglib.bean.format.sql.timestamp java.sql.Timestamp
org.apache.struts.taglib.bean.format.sql.date java.sql.Date
org.apache.struts.taglib.bean.format.sql.time java.sql.Time
org.apache.struts.taglib.bean.format.date java.util.Date
org.apache.struts.taglib.bean.format.int Byte,Short,Integer,Long,BigInteger
org.apache.struts.taglib.bean.format.float Float,Double,BigDecimal
在属性文件中添加建值
例如 属性文件中添加:format.date=####.##
<bean:write name="price" formatKey="format.date"/>
<bean:write>标签中有个filter属性,默认值为True,如果filter属性为true,将把输出内容的特殊HTML符号作为普通字符串来表示,如果filter属性为false,则不会把输出内容中的特殊HTML符号转化为普通字符串。
<bean:size>标签用户获得Map,Collection或数组的长度,id属性定义一个Integer类型的变量,name属性指定已经存在的 Map,Collection或数组变量。
<bean:define>标签定义一个变量,id属性指定变量的名字。toScope属性指定这个变量的存放范围,如果没有指定toScope属性,则这个变量存在page范围,给id属性定义变量赋值有三种方式。
设置value属性,此时Id属性定义的变量为字符串类型,value属性代表这个变量的字符串值。
同时设置name和property属性,name属性指定一个已经存在的bean,property属性指定已经存在的bean的某个属性,id属性定义的变量值由property属性决定。
同时设置name属性和type属性,name属性指定已经存在的JavaBean,type属性指定这个javaBean的完成类名,id属性定义的变量引用这个已经存在的JavaBean。
对于由name属性指定的已经存在的JavaBean,在默认情况下<bean:define>标签会依次在page,request,session,application范围内寻找这个JavaBean。此外,也可以设置<bean:define>标签的scope属性。明确指定这个JavaBean的范围。这样<bean:define>标签只会在指定的范围内寻找JavaBean。
访问Web应用资源
<bean:include>标签和标准的JSP标签<jsp:include>很相似,都可以用来包含其他web资源的内容,区别在于<bean:include>标签吧其他web资源的内容放在一个变量中,而不是直接显示在页面上,
<bean:include>标签的id属性定义一个代表其他web资源的变量。
可以通过<bean:include>标签的forward,page或href属性来指定其他web资源。
forward:指定全局转发路径。和Struts配置文件中的<global-forward>元素中的<forward>子元素相匹配。
page:指定相对于当前应用的URL,以“/”开头。
href:指定完整的URL
<bean:include id="top" page="login.do">
此标签可以提交到Action中。
<bean:message>标签用于输出Resource Bundle中的一条消息,标签中的bundle属性指定Resource Bundle,他和Struts配置文件<message-resources>元素的key属性匹配。如果没有设置bundle属性,就
采用默认的Resource Bundle。既ApplicationResources.properties
下面我们配置两个<message-resources>元素
<message-resources parameter="ApplicationResources"/>
<message-resources parameter="Happy" key="special"/>
第一个Resource Bundle没有指定key属性,因此是默认的Resource Bundle,他的资源文件为ApplicationResources.properties,在这个文件中定义一条消息
hello=Hell0{0}
第二个Resource Bundle指定key属性为special,他的资源文件为happy.properties
在这个文件中定义了一条消息
hell0=Hello.everyone
<bean:message>标签的key属性直接指定消息key,
例如:
<bean:message bundle="secial" key="hello">
<bean:message>标签的name属性指定一个可以转化为字符串的变量,这个变量的字符串值为key。
<%
request.setAttribute("ha","hello");
%>
例如
<bean:message name="ha">
以上代码定义了一个字符串类型的ha变量,值为hello,因此消息key为hello
同时指定<bean:message>标签中name属性和property属性。name属性指定一个JavaBean,property属性指定JavaBean的一个属性。这个JavaBean的属性值就是消息key.
对于带参数的复合消息,可以使用<bean:message>标签的arg0,arg1,arg2,arg3,arg4属性来设置参数值。arg0代表第一个参数。一次类推
例如<bean:message key="hello" argo="happy">
<bean:resource>标签用于检索Web资源的内容,他具有以下属性
Id属性:定义一个代表Web资源的变量。
name属性:指定Web资源的路径。
input:属性设置了值(可以任意的字符串),则Id属性定义的变量为java.io.InputStream类型。
<bean:resource id="res" name="/index.jsp">
<bean:write name="res"/>
以上代码定义的res变量代表"/index.jsp"资源。由于没有设置input属性。因此res为字符串类型。他的值为index.jsp的源文件内容。
<bean:struts>标签用于检索Struts框架内在的对象,如ActionFormBean,ActionForward或ActionMaping.
<bean:struts>标签的Id属性定义了一个page范围的变量。用来引用Struts框架的内在对象。必须设置formbean,forward,mapping属性中的一个属性,来指定被引用的struts内在对象。
formbean属性:指定ActionFormBean对象。如Struts配置文件中<form-bean>元素匹配。
forward属性:指定ActionForward对象,和Struts配置文件中的<global-forwards>元素的<forward>子元素匹配。
mapping属性:指定ActionMapping对象,和Struts配置文件的<action>元素匹配。
举例如下:
<bean:struts id="forward" forward="beanResources">
<bean:write name="forward" property="path">
以上代码标签中定义了一个名为forward变量,它引用了一个名为beanResources的ActionForward对象。在Struts配置文件中,与之匹配的<forward>元素为
<global-forwards>
<forward name="beanResources" path="/beanResources.jsp">
</global-forwards>
接下来<bean:write>标签输出ActionForward对象的path属性值。