在JavaOne 2005大會(huì)上,Oracle的資深副總裁Thomas Kurian進(jìn)行了一次主題演講,展示了Oracle在構(gòu)建和維護(hù)面向服務(wù)架構(gòu)(SOA)方面的觀點(diǎn)和解決方案。
Kurian表示,Oracle的“新應(yīng)用藍(lán)圖”將采用JSF實(shí)現(xiàn)用戶界面,用BPEL(業(yè)務(wù)流程執(zhí)行語言)描述業(yè)務(wù)流程,用EJB 3.0開發(fā)業(yè)務(wù)邏輯。該計(jì)劃還將借助web service和Java業(yè)務(wù)整合規(guī)范來整合遺留系統(tǒng)。
Kurian表示在這個(gè)應(yīng)用藍(lán)圖中,JSF和EJB 3.0(主要用于對象持久化)將扮演非常重要的角色。
全文請看:http://www.javaworld.com/javaworld/jw-06-2005/jw-0629-iw-oracle_p.html
希望ADF Faces早些正式發(fā)表。不過JD免費(fèi)之后,希望Oracle再將ADF的許可搞得友好一些。
第3.10式. 過濾文本輸入
問題
你想要渲染包含HTML標(biāo)記的數(shù)據(jù),并且希望該數(shù)據(jù)被瀏覽器當(dāng)作HTML標(biāo)記解釋和處理。
動(dòng)作要
很簡單,可以使用:
<bean:write name="myForm" property="freeText" filtered="false"/>
在使用JSTL時(shí),你也可以使用未過濾的值:
<c:out value="${myForm.freeText}" escapeXml="false"/>
動(dòng)作變化
在你使用Struts bean:write標(biāo)簽來產(chǎn)生文本時(shí),默認(rèn)情況下任何對HTML處理敏感的字符都要被它們的對等實(shí)體代替。例如,大于號(hào)字符(>) 將被替代為>字符實(shí)體。這種特征稱為是響應(yīng)過濾( response filtering),默認(rèn)情況下是激活的。在大多數(shù)情況下,過濾正是希望的行為,因?yàn)槲唇?jīng)過濾的文本可能被瀏覽器誤解釋。Table 3-4 列出了被bean:write標(biāo)簽過濾的字符和它們的對應(yīng)實(shí)體。
Table 3-4. 被過濾的字符 |
字符名稱 |
字符值 |
替代實(shí)體 |
大于 |
< |
< |
小于 |
> |
> |
&符號(hào) |
& |
& |
雙引號(hào) |
" |
" |
反斜杠 |
\ |
' |
但是有時(shí)候,你希望被渲染的文本中包括HTML 標(biāo)簽。假設(shè)你有一個(gè)在線日志應(yīng)用,允許用戶輸入將要顯示在一個(gè)頁面中的文本。允許使用HTML 標(biāo)簽將使得用戶可以那些可以格式化文本的標(biāo)記。文本中可能包含超鏈接,不同的字體,以及圖像等等。在其他情形下,你的應(yīng)用可能可能還會(huì)從其他來源,比如另一個(gè)URL,一個(gè)XML文件,一個(gè)Web Service或者數(shù)據(jù)庫中,獲得HTML模板文本。
通過將bean:write標(biāo)簽的filtered屬性設(shè)置為false,你就可以告訴Struts標(biāo)簽不要使用相應(yīng)的實(shí)體替換 tag not to 特殊字符。首先,我們來看一下過濾是如何工作的。假設(shè)一個(gè)用戶在表單中輸入了下面的文本:
Apache
Struts Web Framework <b>rocks</b>!
現(xiàn)在這個(gè)文本將被bean:write標(biāo)簽來渲染顯示。當(dāng)filtered 屬性設(shè)施為true時(shí),特殊字符將被其對等物替換,這樣文本看起來就會(huì)是:
Apache
Struts Web Framework <b>rocks</b>!
這很有可能不是用戶所想要的。他想要的是"Apache Struts Web Framework rocks!"。但是,因?yàn)橐鈭D是想要允許用戶輸入裝飾文本的HTML標(biāo)簽,那么將filtered屬性設(shè)置為false 就會(huì)得到正確的渲染:
Apache
Struts Web Framework <b>rocks</b>!
瀏覽器將認(rèn)識(shí)這個(gè)標(biāo)簽,并且按其所愿正確的應(yīng)用HTML 標(biāo)記。
這在渲染一個(gè)Web頁面時(shí)式一個(gè)有用的機(jī)制。但是,在使用這個(gè)方法時(shí)必須足夠小心。如果數(shù)據(jù)是沒有過濾的,那么就可能會(huì)危及渲染后的 HTML頁面的布局,整個(gè)頁面可能會(huì)看起來遭到破壞。例如,假定下面的文本被輸入:
Apache
Struts Web Framework <b>rocks<b>!
咋看起來,這沒什么問題。但是,注意到b元素的后面一個(gè)關(guān)閉標(biāo)簽的斜杠缺失了。這個(gè)錯(cuò)誤很容易發(fā)生,而且這可能會(huì)使得頁面中后面的所有文本都是粗體。
不幸的是,要避免這類錯(cuò)誤是很困難的。最好還是試圖確保輸入的數(shù)據(jù)都是正確有效的HTML。還有個(gè)選擇就是通過XML 解析器來處理輸出。它會(huì)檢測諸如標(biāo)記不匹配之類的問題。你還可以通過一些能夠試圖糾正問題的解析器來完成,比如Jtidy。最后,如果數(shù)據(jù)是來自于非受控的來源,你可以選擇完全不允許HTML。如果你還想使用一些文本裝飾功能的話,還可以考慮使用WikiText 或者UBB Code之類的格式表示來替代。
相關(guān)動(dòng)作
JTidy 提供了一個(gè)命令行接口和Java API 來解析和整理HTML。關(guān)于JTidy 的細(xì)節(jié)請?jiān)L問http://jtidy.sourceforge.net。
UBBCode 是PHP本身支持的一種標(biāo)記格式。也可以在Java中處理UBBCode。一個(gè)解析UBBCode 的PHP函數(shù),有人在Java中重寫了,地址可見:http://www.firegemsoftware.com/other/tutorials/ubb.php.
本書翻譯工作已經(jīng)完成,正在修訂和聯(lián)系出版事宜。
樣章可以在這里下載。
請大家在這里留下意見。也歡迎發(fā)送給您的朋友。
摘要: 最近忙,好久沒來這里寫東西了。今天抽點(diǎn)時(shí)間繼續(xù)。上周去北京,坐火車去,在火車上閱讀《Core J2EE Patern》,想起再上一次去北京,也是坐火車,也是閱讀這本書,不過那次是第1版。還有巧的是,去時(shí)鋪位是16車16號(hào),來時(shí)居然又買到16車16號(hào),不過是上鋪。真是有點(diǎn)意思。
Recipe 3.9. 產(chǎn)生動(dòng)態(tài)選擇列表項(xiàng)目
問題
你想要基于同一個(gè)表單中的另一個(gè)字... 閱讀全文
摘要: 第3.8式. 使用JavaScript動(dòng)態(tài)改變選擇項(xiàng)
問題
你希望使用JavaScript 來根據(jù)從應(yīng)用模型中獲得的數(shù)據(jù)來動(dòng)態(tài)設(shè)置顯示在一個(gè)HTML select元素中的條目。
動(dòng)作要領(lǐng)
使用Struts logic:iterate標(biāo)簽來為不同的選項(xiàng)集創(chuàng)建JavaScript 數(shù)組。然后使用JavaScript 的onchange事件句柄來在運(yùn)行時(shí)修改options集。Example 3-... 閱讀全文