熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts1.x系列教程(6):Bean標簽庫

2013-11-23 20:08:44  來源: Java開源技術 

  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工程目錄>中建立一個文件代碼如下

  

  <%@ page pageEncoding=GBK%>
  <%@ taglib uri=bean prefix=bean%>
  <html>
      <head>
          <title>獲得HTTP請求信息</title>
      </head>
      <body>
          <%  測試bean:cookie標簽 %>
          <bean:cookie id=myCookie name=name value=default />  
          <% 
              if (myCookiegetValue()equals(default)) 
              { 
                  Cookie cookie = new Cookie(name newCookie); 
                  cookiesetMaxAge(); 
                  responseaddCookie(cookie); 
              } 
          %>
      ${myCookievalue} <% 用EL輸出myCookie的value屬性值 %>
      <% 
          // ${myCookievalue}相當於如下Java代碼
          Cookie cookie = (Cookie)pageContextgetAttribute(myCookie);
           outprintln(cookiegetValue());         
      %> <br>
       <%  測試bean:header標簽 %>
      <bean:header id=userAgent name=useragent value=unknown/>
      ${userAgent}<br>  <% 用EL輸出userAgent的值 %>
      <% 測試bean:parameter標簽  %>
      <bean:parameter id=myCountry name=country value=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文件代碼如下

  

  <%@ page pageEncoding=GBK%>
<%@ taglib uri=bean prefix=bean%>
<html>
      <head>
          <title>訪問Java對象</title>
      </head>
      <body>
      <%  建立actionformHtmlTagsForm對象實例 %>
      <jsp:useBean id=htmlTagsForm class=actionformHtmlTagsForm/>
      <jsp:setProperty name=htmlTagsForm property=name value = 李寧/>
      <%  測試bean:define標簽 %>    
      <bean:define id=myBeanVar name=htmlTagsForm property=name/>
      ${myBeanVar}
      <%
          String[] arr = new String[];
          pageContextsetAttribute(arr arr);
       %>    
      <%  測試bean:size標簽 %>    
       <bean:size id=length name=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文件代碼如下

  

  <%@ page pageEncoding=GBK%>
  <%@ taglib uri=bean prefix=bean%>
  <html>
      <head>
          <title>訪問JSP內嵌對象和Struts配置對象</title>
      </head>
      <body>
          <bean:page id=myRequest property=request />
          myRequestcharacterEncoding = ${myRequestcharacterEncoding}
          <br>
          ntextPath = ${ntextPath}
          <%
              outprintln(myRequestgetParameter(abc));
          %>
          <bean:struts id = myHtmlTagsForm formBean=htmlTagsForm/><br>
          myHtmlTagsFormtype = ${myHtmlTagsFormtype}<br>
          myHtmlTagsFormgetClass() = ${myHtmlTagsFormclass} 
          <bean:struts id = myHtmlTags mapping=/htmlTags/><br>
          myHtmlTagstype = ${myHtmlTagstype}<br>
          myHtmlTagsgetClass() = ${myHtmlTagsclass} 
          <bean:struts id = myNewProduct forward=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 = hello world
myGreet = hello {}

  然後在strutsconfigxml中的<strutsconfig>元素中添加如下的子標簽

  

  <messageresources parameter=strutsMyResources key=my />

  最後在<samples工程目錄>中建立一個accessResourcesjsp文件代碼如下

  

  <%@ page pageEncoding=GBK%>
  <%@ page import=actionformHtmlTagsForm%>
  <%@ taglib uri=bean prefix=bean%>
  <html>
      <head>
          <title>訪問Web資源和屬性文件</title>
      </head>
      <body>
          <bean:include id=myWebVar
               />
          <bean:include id=myWebVar page=/htmlTagsjsp />
          <bean:include id=myWebVar forward=newProduct />
          ${myWebVar} ${myWebVar} ${myWebVar}
  
          <bean:resource id=myResVar name=/htmlTagsjsp />
          ${myResVar}
          <%  從MyResourcesproperties中獲得信息 %> 
          <bean:message bundle=my key=greet />
          <%  從ErrorDescriptionproperties中獲得信息 %> 
          <bean:message key=erroremailinvalid />
          <bean:message bundle=my key=myGreet arg=李寧 />
  
          <%
          requestsetAttribute(newGreet greet);
          %>
          <bean:message bundle=my name=newGreet />
          <%
              HtmlTagsForm form = new HtmlTagsForm();
              formsetName(myGreet);
              requestsetAttribute(form form);
          %>
           <%  從form對象的name屬性獲得key %>
          <bean:message bundle=my name=form property=name arg=李寧 />
      </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 = yyyyMMdd hh:mm:ss

  在<samples工程目錄>目錄中建立一個beanWritejsp文件代碼如下

  

  <%@ page pageEncoding=GBK%>
  <%@page import=actionformHtmlTagsFormjavautil*%>
  <%@ taglib uri=bean prefix=bean%>
  <html>
      <head>
          <title>測試bean:write</title>
      </head>
      <body>
          <%
              requestsetAttribute(abcd myValue);
              HtmlTagsForm form = new HtmlTagsForm();
              formsetName(hello);
              formsetWork(<b>工程師</b>);
              requestsetAttribute(form form);
  
              Calendar calendar = CalendargetInstance();
              requestsetAttribute(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=yyyyMMdd HH:mm:ss /><br>
          <bean:write name=calendar property=timeformatKey=formatDate bundle=my />
      </body>
  </html>

  在IE中輸入如下的URL來測試beanWritejsp

  

  如果讀者想了解關於bean標簽庫的更詳細的信息也可以訪問官方的網站URL如下

  l


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28008.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.