|
Bean 標(biāo)簽庫 此標(biāo)簽庫和Java Bean有很強(qiáng)的關(guān)聯(lián)性,設(shè)計(jì)的本意是要在JSP 和JavaBean 之間提供一個(gè)接口。Struts 提供了一套小巧有用的標(biāo)簽庫來操縱JavaBean和相關(guān)的對(duì)象:cookie、 header、 parameter、 define、write、message、 include、page、resource、size、struts。
- bean:cookie、bean:header、bean:parameter
這三個(gè)標(biāo)簽用來重新得到cookie, request header和request parameter。 bean:header和bean:parameter標(biāo)簽定義了一個(gè)字符串;bean:cookie標(biāo)簽定義了一個(gè)Cookie對(duì)象。你可以使用value屬性做為默認(rèn)值。如果找不到指定的值,且默認(rèn)值沒有設(shè)定的話,會(huì)拋出一個(gè)request time異常。如果你期望返回多個(gè)值的話,可把multiple屬性設(shè)為true。
<bean:cookie id="sessionID" name="JSESSIONID" value="JSESSIONID-ISUNDEFINED"/> // 這段代碼定義了一個(gè)名為sessionID的腳本變量,如果找不到一個(gè)名為JSESSIONID的cookie,那sessionID // 的值就被設(shè)置為JSESSIONID-ISUNDEFINED。 | 下面代碼會(huì)輸出一些Cookie對(duì)象的一些屬性:
<jsp:getProperty name="sessionID " property="comment"/> … <jsp:getProperty name="sessionID" property="domain"/> … <jsp:getProperty name="sessionID" property="maxAge"/> … <jsp:getProperty name="sessionID" property="path"/> … <jsp:getProperty name="sessionID" property="value"/> … <jsp:getProperty name="sessionID" property="version"/> … | 下面是在request中輸出所有header的例子:
<% java.util.Enumeration names =((HttpServletRequest) request).getHeaderNames(); %> … <% while (names.hasMoreElements()) { String name = (String) names.nextElement(); %> <bean:header id="head" name="<%= name %>"/> … <%= name %> … <%= head %> … <% } %> | 下面是parameter的例子:
<bean:parameter id="param1" name="param1"/> <bean:parameter id="param2" name="param2" multiple="true"/> // 此處定義了一個(gè)param2[]。 <bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/> | 于其它標(biāo)簽結(jié)合使用:
<bean:header id="browser" name="User-Agent"/> <P>You are viewing this page with: <bean:write name="browser"/></P> ---------------------------------------------------------------------------------------------------------------------------------- <bean:cookie id="username" name="UserName" scope="session" value="New User" /> <P>Welcome <bean:write name="username" property="value"/!</P> // 根據(jù)cookie創(chuàng)建一個(gè)新的Bean,如果用戶名稱已經(jīng)存儲(chǔ)在cookie中,它就不顯示為一個(gè)新用戶。 |
- bean:define:有三個(gè)用途。
一是定義新字符串常量:
<bean:define id="foo" value="This is a new String"/> <bean:define id="bar" value=‘<%= "Hello, " + user.getName() %>‘/> <bean:define id="last" scope="session" value=‘<%= request.getRequestURI() %>‘/> |
二是復(fù)制一個(gè)現(xiàn)有的bean給新的bean:
<bean:define id="foo" name="bar"/> <bean:define id="baz" name="bop" type="com.mycompany.MyClass"/> //定義腳本變量的類型,默認(rèn)為Object |
三是復(fù)制一個(gè)現(xiàn)有的bean的屬性給新的bean:
<bean:define id="bop" name="user" property="role[3].name"/> <bean:define id="foo" name="bar" property="baz" scope="request" toScope="session"/> //toScope屬性指新bean的scope,默認(rèn)為page |
上段代碼的意思是把名為bar的bean的baz屬性賦值給foo,foo的類型為String(默認(rèn))。
-
bean:include 這個(gè)標(biāo)簽和bean:include標(biāo)簽和相似,不同點(diǎn)就是它定義了一個(gè)可以復(fù)用的腳本變量。用id屬性命名一個(gè)新的腳本變量,還支持forward、href、page和transaction.屬性,和html:link中的屬性意義一樣。
<bean:include id="footerSpacer" page="/long/path/footerSpacer.jsp"/> 然后你能夠在多個(gè)地方(scope為page)調(diào)用: <bean:write name="footerSpacer" /> |
-
bean:message 用來實(shí)現(xiàn)對(duì)國際化的支持的一個(gè)標(biāo)簽,配合java.util數(shù)據(jù)包中定義的Locale和ResourceBundle類來完成這個(gè)任務(wù),用java.text.MessageFormat類配置消息的格式。 首先要指定資源文件的名稱。這個(gè)文件會(huì)包含用默認(rèn)語言編寫的在程序中會(huì)出現(xiàn)的所有消息,這些消息以“關(guān)鍵字-值”的形式存儲(chǔ)。文件需要存儲(chǔ)在類路徑下,路徑要作為初始化參數(shù)傳送給ActionServlet。 實(shí)現(xiàn)國際化的規(guī)定:所有的資源文件必須都存儲(chǔ)在基本資源文件所在的目錄中?;举Y源文件包含的是用默認(rèn)地區(qū)語言-本地語言編寫的消息。如果基本資源文件的名稱是ApplicationResources.properties,那么用其他特定語言編寫的資源文件的名稱就應(yīng)該是ApplicationResources_xx.properties(xx為ISO編碼,如英語是en)。因此這些文件應(yīng)包含相同的關(guān)鍵字,但關(guān)鍵字的值是用特定語言編寫的。 然后,ActionServlet的區(qū)域初始化參數(shù)必須與一個(gè)true值一起傳送,這樣ActionServlet就會(huì)在用戶會(huì)話中的Action.LOCALE_KEY關(guān)鍵字下存儲(chǔ)一個(gè)特定用戶計(jì)算機(jī)的區(qū)域?qū)ο蟆,F(xiàn)在可以運(yùn)行一個(gè)國際化的web站點(diǎn),它可以根據(jù)用戶計(jì)算機(jī)上的設(shè)置的區(qū)域自動(dòng)以相應(yīng)的語言顯示。 使用特定的字符串來替換部分消息:
|
在資源文件中的定義:info.myKey = The numbers entered are {0},{1},{2},{3} 標(biāo)記的使用:<bean:message key="info.myKey" arg0="5" arg1="6" arg2="7" arg3="8"/> Jsp頁面的顯示:The numbers entered are 5,6,7,8 // 最多支持4個(gè)參數(shù) |
-
bean:page:把Jsp中的內(nèi)部對(duì)象做為腳本變量。
| <bean:page id="requestObj" property="request"/> |
-
bean:resource:獲得應(yīng)用程序的資源,這個(gè)資源可以是一個(gè)String或從java.io.InputStream中讀入。使用ServletContext.getResource()ServletContext.getResourceAsStream() 方法檢索web應(yīng)用中的資源,如果在檢索資源時(shí)發(fā)生問題,就會(huì)產(chǎn)生一個(gè)ruquest time異常。
| <bean:resource id="webxml" name="/WEB-INF/web.xml"/> | 使用input屬性時(shí),資源會(huì)做為一個(gè)InputStream,如果不指定就被當(dāng)成一個(gè)String。
-
bean:size:得到存儲(chǔ)在array、collection或map中的數(shù)目,類型為java.lang.Integer。
| <bean:size id="count" name="employees" /> |
-
bean:struts:復(fù)制Struct 對(duì)象(三種類型)給新的bean,scope為page。
<bean:struts id="form" formBean="CustomerForm"/> <bean:struts id="fwd" forward="success"/> <bean:struts id="map" mapping="/saveCustomer"/> |
-
bean:write:以字符串形式輸出bean的屬性值。 filter屬性:設(shè)為true時(shí),將HTML保留字轉(zhuǎn)換為實(shí)體("<" 轉(zhuǎn)換為 <); ignore屬性:如果對(duì)象不存在,不會(huì)拋出異常。
| <bean:write name="userRegistration" property="email" scope="request"/> |
|