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

简介:
ean 标签库共有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 文件,代码如下:
   <% @ page pageEncoding = " GBK " %>
  
<% @ 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 文件 代码如下
 
<% @ page pageEncoding = " GBK " %>
<% @ 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 文件,代码如下:

   <% @ page pageEncoding = " GBK " %>
  
<% @ 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文件,并输入如下的内容:    

greet  =  hello world
myGreet 
=  hello { 0 }

然后在struts-config.xml中的<struts-config>元素中添加如下的子标签:

   < message-resources  parameter ="struts.MyResources"  key ="my"   />
最后在<samples 工程目录> 中建立一个accessResources.jsp 文件,代码如下:
   <% @ page pageEncoding = " GBK " %>
  
<% @ 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 元素的敏感符号都会被替换成相应的字符串(如“< ”被替换成了“&lt; ”,“> ”被替换成了“&gt; ”)。
4. format :用于格式化输出内容的格式化字符串。
5. formatKey :保存在属性文件中的格式化字符串的key
6. scope name 变量保存的范围。默认是page 范围。
下面的例子演示了<bean:write> 的常用方法。在运行这个例子之前,在<samples 工程目录>"src"struts"MyResources.properties 文件中加入如下的内容:

formatDate  =  yyyy-MM-dd hh:mm:ss
<samples 工程目录> 目录中建立一个beanWrite.jsp 文件,代码如下:

   <% @ page pageEncoding = " GBK " %>
  
<% @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





 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215235,如需转载请自行联系原作者


相关文章
|
XML SQL Java
JavaWeb--EL表达式&JSTL 标签库
JavaWeb--EL表达式&JSTL 标签库
68 0
|
存储 Java
【JavaWeb】之JSTL & EL表达式(下)
【JavaWeb】之JSTL & EL表达式(下)
106 0
【JavaWeb】之JSTL & EL表达式(下)
|
Java Apache 开发者
【JavaWeb】之JSTL & EL表达式(上)
【JavaWeb】之JSTL & EL表达式
106 0
springMvc36-JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)
springMvc36-JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)
101 0
|
Java
JavaWeb--EL表达式&JSTL 标签库(一)
JavaWeb--EL表达式&JSTL 标签库(一)
92 0
JavaWeb--EL表达式&JSTL 标签库(一)
|
Java
JavaWeb--EL表达式&JSTL 标签库(二)
JavaWeb--EL表达式&JSTL 标签库(二)
100 0
JavaWeb--EL表达式&JSTL 标签库(二)
|
Java API 数据格式
JavaWeb--EL表达式&JSTL 标签库(三)
JavaWeb--EL表达式&JSTL 标签库(三)
148 0
JavaWeb--EL表达式&JSTL 标签库(三)
关于SpringMVC整合freemarker报错问题
错误信息: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'FreeMarkerConfigurer' defined in class path resource [spring-mvc.
1679 0