锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜久久久影院伊人,亚洲精品尤物yw在线影院,国产亚洲精品无码拍拍拍色欲http://m.tkk7.com/wjywilliam/category/35145.htmlConsciousness Of Programming - wjywilliam 鎯抽錛屾繪槸浼氶鐨?..... zh-cnThu, 09 Jun 2011 18:16:49 GMTThu, 09 Jun 2011 18:16:49 GMT60FreeMarker鐗規т粙緇嶄笌姒傝堪http://m.tkk7.com/wjywilliam/articles/351928.htmlwjywilliamwjywilliamWed, 08 Jun 2011 09:46:00 GMThttp://m.tkk7.com/wjywilliam/articles/351928.htmlhttp://m.tkk7.com/wjywilliam/comments/351928.htmlhttp://m.tkk7.com/wjywilliam/articles/351928.html#Feedback0http://m.tkk7.com/wjywilliam/comments/commentRss/351928.htmlhttp://m.tkk7.com/wjywilliam/services/trackbacks/351928.html 涓錛嶧reemarker綆浠?br />
浜岋紟鐜鎼緩涓庨厤緗?/strong>

涓夛紟甯哥敤璇硶

鍥涳紟涓嶴truts緇撳悎

浜旓紟鐢熸垚Html欏甸潰


涓錛嶧reemarker綆浠?br /> 浠涔堟槸Freemarker:.

Freemaker鏄竴涓濇ā鏉垮紩鎿庘?涔熷彲浠ヨ鏄竴涓熀浜庢ā鏉挎妧鏈殑鐢熸垚鏂囨湰杈撳嚭鐨勪竴涓氱敤宸ュ叿.瀹冩槸涓涓狫AVA鐨勫寘,涓涓狫AVA紼嬪簭鍛樺彲浠ヤ嬌鐢ㄧ殑

綾誨簱.鏈韓騫朵笉鏄竴涓鏈緇堢敤鎴風殑搴旂敤紼嬪簭.浣嗘槸,紼嬪簭鍛樺彲浠ユ妸瀹冨簲鐢ㄥ埌浠栦滑鐨勪駭鍝佷腑.

FreeMarker鏄璁′負鍙互鐢熸垚WEB PAGES.瀹冩槸鍩轟簬SERVLET閬靛驚MVC妯″紡鐨?榪欎釜鎬濊礬鏄簲鐢∕VC妯″紡瑕侀檷浣庡垎紱?緗戦〉璁捐浜哄憳鍜岀▼搴忓憳鐨勮﹀悎.

姣忎釜浜洪兘鍙互鍋氫粬浠搮闀跨殑宸ヤ綔.緗戦〉璁捐浜哄憳鍙互鏀瑰彉緗戦〉鐨勯潰璨?鑰屽茍涓嶉渶瑕佺▼搴忓憳鐨勯噸鏂扮紪璇?鍥犱負涓氬姟閫昏緫鍜岄〉闈㈢殑璁捐宸茬粡琚垎紱誨紑浜?/p>

.妯℃澘鏄笉鑳界敱澶嶆潅鐨勭▼搴忕墖鏂粍鎴愮殑.鍗充究緗戦〉璁捐浜哄憳鍜岀▼搴忓憳鏄竴涓漢. 鍒嗙鏄湁蹇呰鐨?瀹冭兘浣跨▼搴忔洿鍔犵殑鐏墊椿鍜屾竻鏅?

铏界劧Freemarker鑳界紪紼?浣嗘槸瀹冨茍涓嶆槸涓涓紪紼嬭璦.瀹冩槸涓虹▼搴忔樉紺烘暟鎹屽噯澶囩殑.(鍍忔暟鎹簱SQL璇彞鐨勬煡璇?)浠ュ強.Freemarker浠呬粎鏄埄鐢ㄦā

鏉垮姞涓婃暟鎹敓鎴愭枃鏈〉闈?

Freemarker騫朵笉鏄竴涓猈EB搴旂敤紼嬪簭妗嗘灦.鍙互璇存槸涓涓猈EB搴旂敤妗嗘灦鐨勪竴涓粍浠?浣嗘槸FREEMARKER寮曟搸鏈韓騫朵笉浜嗚ВHTTP鎴栬匰ERVLETS.瀹冨彧涓嶈繃

鐢熸垚鏂囨湰鑰屽凡.娉ㄦ剰,瀹冩槸MVC妗嗘灦鐨勪竴涓粍浠?濡係TRUTS),涔熷彲浠ュ湪妯℃澘涓嬌鐢↗SP鏍囩.

聽 Freemarker涓嬭澆鍦板潃涓猴細http://www.freemarker.org/index.html

涓鑸殑鐢ㄩ?

l 鑳界敤鏉ョ敓鎴愪換鎰忔牸寮忕殑鏂囨湰:HTML,XML,RTF,JAVA婧愮爜,絳夌瓑.

l鍙互鏇村ソ鐨勫祵鍏ュ埌浣犵殑浜у搧涓?杞婚噺綰х殑.騫朵笉闇瑕乻ervlet鐜.涓嶄緷璧杍avax.servlet.classes.

l鍙彃鍏ョ殑妯℃澘璇誨彇鍣?浣犲彲浠ヤ粠浠繪剰鐨勬簮鐮佽鍙栦換鎰忕殑妯℃澘.鏈湴鐨勬枃浠?鏁版嵁搴撶瓑絳?

l浣犲彲浠ュ仛浠繪剰浣犳兂鐢熸垚鐨勬枃鏈?瀛樺偍涓烘湰鍦版枃浠?鍙互鐢ㄦ潵鍙戦丒MAIL鎴栬繑鍥炲埌WEB嫻忚鍣ㄤ腑.

寮哄ぇ鐨勬ā鏉胯璦

l瀹屾暣鐨勬寚浠?include,if/elseif/else,loop.

l 寤虹珛鍜屼慨鏀規ā鏉夸腑鐨勫彉閲?

l 鑳界敤澶嶆潅鐨勮〃杈懼紡鍦ㄤ換鎰忓湴鏂規寚瀹氬彉閲?

n瀛楃涓叉搷浣?concateration,sub-string,uppercase,capitalize,escaping.絳夌瓑

n鍗佽繘鍒舵暟瀛﹁綆?

n BOOL

n璇誨彇鏁扮粍鍜岀浉鍏崇殑鏁扮粍鍏冪礌.

n鍙互鑷繁娣誨姞鐗規畩鐨勮綆楁柟娉?

l瀹忔寚浠?/p>

l 鍛藉悕絀洪棿鐢ㄦ潵鍒涘緩鍜岀淮鎶ゅ畯鎸囦護搴撴垨鑰呮妸澶х殑欏圭洰鍒嗘垚璁稿妯″潡.騫朵笉鐢ㄦ媴蹇冨懡鍚嶅啿紿?br />

----------------------------------------------------------------------------
浜岋紟鐜鎼緩涓庨厤緗?br />
<!鈥攆reemarker鍒濆閰嶇疆-->

<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html</param-value>
</init-param>
<init-param>
<param-name>template_update_delay</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>zh_CN </param-value>
</init-param>
<init-param>
<param-name>number_format</param-name>
<param-value>0.##########</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>

----------------------------------------------------------------------------
涓夛紟甯哥敤璇硶
聽EG.涓涓璞OOK


1.杈撳嚭 ${book.name}

絀哄煎垽鏂細${book.name?if_exists },

${book.name?default(鈥榵xx鈥?}//榛樿鍊紉xx
${ book.name!"xxx"}//榛樿鍊紉xx

鏃ユ湡鏍煎紡錛?{book.date?string('yyyy-MM-dd')}

鏁板瓧鏍煎紡錛?{book?string.number}--20
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}鈥?lt;#-- 20% -->

鎻掑叆甯冨皵鍊鹼細
<#assign foo=ture />
${foo?string("yes","no")} <#-- yes -->




2錛庨昏緫鍒ゆ柇
a:
<#if condition>...
<#elseif condition2>...
<#elseif condition3>......
<#else>...
鍏朵腑絀哄煎垽鏂彲浠ュ啓鎴?lt;#if book.name?? >

</#if>


b:
<#switch value>
聽 <#case refValue1>
聽聽聽 ...
聽聽聽 <#break>
聽 <#case refValue2>
聽聽聽 ...
聽聽聽 <#break>
聽 ...
聽 <#case refValueN>
聽聽聽 ...
聽聽聽 <#break>
聽 <#default>
聽聽聽 ...
</#switch>

3錛庡驚鐜鍙?br /><#list sequence as item>
...
</#list>
絀哄煎垽鏂?lt;#if bookList?size = 0></#list>


e.g.
<#list employees as e>
${e_index}. ${e.name}
</#list>
杈撳嚭:
1. Readonly
2. Robbin


4.FreeMarker


4聽瀹?妯℃澘

瀹廙acro

瀹忔槸鍦ㄦā鏉夸腑浣跨敤macro鎸囦護瀹氫箟
l.1 鍩烘湰鐢ㄦ硶
瀹忔槸鍜屾煇涓彉閲忓叧鑱旂殑妯℃澘鐗囨柇錛屼互渚垮湪妯℃澘涓氳繃鐢ㄦ埛瀹氫箟鎸囦護浣跨敤璇ュ彉閲忥紝涓嬮潰鏄竴涓緥瀛愶細

<#macro greet>
聽 <font size="+2">Hello Joe!</font>
</#macro>

璋冪敤瀹忔椂錛屼笌浣跨敤FreeMarker鐨勫叾浠栨寚浠ょ被浼鹼紝
聽鍙槸浣跨敤@鏇夸唬FTL鏍囪涓殑#銆?/strong>

<@greet></@greet>

<#--<@greet/>-->


鍦╩acro鎸囦護涓彲浠ュ湪瀹忓彉閲忎箣鍚庡畾涔夊弬鏁?/strong>錛屽錛?/p>

<#macro greet person>
聽 <font size="+2">Hello ${person}!</font>
</#macro>
聽鍙互榪欐牱浣跨敤榪欎釜瀹忓彉閲忥細
聽聽<@greet person="Fred"/>
聽浣嗘槸涓嬮潰鐨勪唬鐮佸叿鏈変笉鍚岀殑鎰忔濓細
聽聽<@greet person=Fred/>
聽榪欐剰鍛崇潃灝咶red鍙橀噺鐨勫間紶緇檖erson鍙傛暟錛岃鍊間笉浠呮槸瀛楃涓詫紝榪樺彲浠ユ槸鍏跺畠綾誨瀷錛岀敋鑷蟲槸澶嶆潅鐨勮〃杈懼紡銆?/p>


瀹忓彲浠ユ湁澶氬弬鏁幫紝涓嬮潰鏄竴涓緥瀛?/strong>錛?br /><#macro greet person color>
聽 <font size="+2" color="${color}">Hello ${person}!</font>
</#macro>

鍙互榪欐牱浣跨敤璇ュ畯鍙橀噺錛屽叾涓弬鏁扮殑嬈″簭鏄棤鍏崇殑錛?br /><@greet person="Fred" color="black"/>

鍙互鍦ㄥ畾涔夊弬鏁版椂鎸囧畾緙虹渷鍊鹼紝鍚﹀垯錛屽湪璋冪敤瀹忕殑鏃跺欙紝蹇呴』瀵規墍鏈夊弬鏁拌祴鍊鹼細
<#macro greet person color="black">
聽 <font size="+2" color="${color}">Hello ${person}!</font>
</#macro>

娉ㄦ剰錛氬畯鐨勫弬鏁版槸灞閮ㄥ彉閲忥紝鍙兘鍦ㄥ畯瀹氫箟涓湁鏁堛?/p>


鍦ㄥ畯閲屽祵濂楀唴瀹?br />FreeMarker鐨勫畯鍙互鏈夊祵濂楀唴瀹癸紝
<#nested>鎸囦護浼氭墽琛屽畯璋冪敤鎸囦護寮濮嬪拰緇撴潫鏍囪涔嬮棿鐨勬ā鏉跨墖鏂紝涓句竴涓畝鍗曠殑渚嬪瓙錛?/p>

<#macro border>
聽 <table border=4 cellspacing=0 cellpadding=4><tr><td>
聽聽聽 <#nested>
聽 </tr></td></table>
</#macro>

鎵ц瀹忚皟鐢細
<@border>The bordered text</@border>
杈撳嚭緇撴灉錛?br /><table border=4 cellspacing=0 cellpadding=4>
聽<tr><td>
聽聽聽 聽聽The bordered text
聽 聽</tr></td>
</table>

<#nested>鎸囦護鍙互琚嬈¤皟鐢紝姣忔閮戒細鎵ц鐩稿悓鐨勫唴瀹廣?br /><#macro do_thrice>
聽 <#nested>
聽 <#nested>
聽 <#nested>
</#macro>


<@do_thrice>
聽 Anything.
</@do_thrice>

FMPP 杈撳嚭緇撴灉錛?br />Anything.
Anything.
Anything.

宓屽鍐呭鍙互鏄湁鏁堢殑FTL錛屼笅闈㈡槸涓涓湁浜涘鏉傜殑渚嬪瓙錛屾垜浠皢涓婇潰涓変釜瀹忕粍鍚堣搗鏉ワ細
<@border>
聽 <ul>
聽 <@do_thrice>
聽聽聽 <li><@greet person="Joe"/>
聽 </@do_thrice>
聽 </ul>
</@border>
杈撳嚭緇撴灉錛?br /><table border=4 cellspacing=0 cellpadding=4><tr><td>
聽 <ul>
聽聽聽 <li><font size="+2">Hello Joe!</font>
聽聽聽 <li><font size="+2">Hello Joe!</font>
聽聽聽 <li><font size="+2">Hello Joe!</font>
聽 </ul>
聽 </tr></td></table>

瀹忓畾涔変腑鐨勫眬閮ㄥ彉閲忓宓屽鍐呭鏄笉鍙鐨?/strong>錛屼緥濡傦細
<#macro repeat count>
聽 <#local y = "test">
聽 <#list 1..count as x>
聽聽聽 ${y} ${count}/${x}: <#nested>
聽 </#list>
</#macro>

<@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat>

杈撳嚭緇撴灉錛?br />test 3/1: ? ? ?
test 3/2: ? ? ?
test 3/3: ? ? ?


鍦ㄥ畯瀹氫箟涓嬌鐢ㄥ驚鐜彉閲?br />nestted鎸囦護涔熷彲浠ユ湁寰幆鍙橀噺錛堝驚鐜彉閲忕殑鍚箟瑙佷笅鑺傦級錛岃皟鐢ㄥ畯鐨勬椂鍊欏湪瀹忔寚浠ょ殑鍙傛暟鍚庨潰渚濇鍒楀嚭寰幆鍙橀噺鐨勫悕瀛楋紝鏍煎紡濡備笅錛?/p>

<@ macro_name paramter list; loop variable list[,]>

渚嬪錛?br /><#macro repeat count>
聽 <#list 1..count as x>
聽聽聽 <#nested x, x/2, x==count>
聽 </#list>
</#macro>

<@repeat count=4 ; c, halfc, last>
聽 ${c}. ${halfc}<#if last> Last!</#if>
</@repeat>

榪欓噷count鏄畯鐨勫弬鏁幫紝c, halfc,last鍒欎負寰幆鍙橀噺錛岃緭鍑虹粨鏋滐細
聽 1. 0.5
聽 2. 1
聽 3. 1.5
聽 4. 2 Last!
寰幆鍙橀噺鍜屽畯鏍囪鎸囧畾鐨勪笉鍚屼笉浼氭湁闂錛屽鏋滆皟鐢ㄦ椂灝戞寚瀹氫簡寰幆鍙橀噺錛岄偅涔堝浣欑殑鍊間笉鍙銆傝皟鐢ㄦ椂澶氭寚瀹氫簡寰幆鍙橀噺錛屽浣欑殑寰幆鍙橀噺

涓嶄細琚垱寤猴細
<@repeat count=4 ; c, halfc, last>
聽 ${c}. ${halfc}<#if last> Last!</#if>
</@repeat>

<@repeat count=4 ; c, halfc>
聽 ${c}. ${halfc}
</@repeat>

<@repeat count=4>
聽 Just repeat it...
</@repeat>

鍦ㄦā鏉夸腑瀹氫箟鍙橀噺
鍦ㄦā鏉夸腑瀹氫箟鐨勫彉閲忔湁涓夌綾誨瀷錛?br />plain鍙橀噺錛氬彲浠ュ湪妯℃澘鐨勪換浣曞湴鏂硅闂紝鍖呮嫭浣跨敤include鎸囦護鎻掑叆鐨勬ā鏉匡紝浣跨敤assign鎸囦護鍒涘緩鍜屾浛鎹€?br />灞閮ㄥ彉閲忥細鍦ㄥ畯瀹氫箟浣撲腑鏈夋晥錛屼嬌鐢╨ocal鎸囦護鍒涘緩鍜屾浛鎹€?br />寰幆鍙橀噺錛氬彧鑳藉瓨鍦ㄤ簬鎸囦護鐨勫祵濂楀唴瀹癸紝鐢辨寚浠わ紙濡俵ist錛夎嚜鍔ㄥ垱寤猴紱瀹忕殑鍙傛暟鏄眬閮ㄥ彉閲忥紝鑰屼笉鏄驚鐜彉閲?br />灞閮ㄥ彉閲忛殣钘忥紙鑰屼笉鏄鐩栵級鍚屽悕鐨刾lain鍙橀噺錛涘驚鐜彉閲忛殣钘忓悓鍚嶇殑灞閮ㄥ彉閲忓拰plain鍙橀噺錛屼笅闈㈡槸涓涓緥瀛愶細

<#assign x = "plain">

${x}聽 <#-- we see the plain var. here -->

<@test/>
聽 6. ${x}聽 <#-- the value of plain var. was not changed -->
聽 <#list ["loop"] as x>
聽 7. ${x}聽 <#-- now the loop var. hides the plain var. -->
聽聽聽 <#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->
聽 8. ${x}聽 <#-- it still hides the plain var. -->
聽 </#list>
聽 9. ${x}聽 <#-- the new value of plain var. -->
聽 <#macro test>
聽 2. ${x}聽 <#-- we still see the plain var. here -->
聽 <#local x = "local">
聽 3. ${x}聽 <#-- now the local var. hides it -->
聽 <#list ["loop"] as x>
聽聽聽 4. ${x}聽 <#-- now the loop var. hides the local var. -->
聽 </#list>
聽 5. ${x}聽 <#-- now we see the local var. again -->
</#macro>
杈撳嚭緇撴灉錛?br />聽 1. plain
聽 2. plain
聽 3. local
聽 4. loop
聽 5. local
聽 6. plain
聽 7. loop
聽 8. loop
聽 9. plain2
鍐呴儴寰幆鍙橀噺闅愯棌鍚屽悕鐨勫閮ㄥ驚鐜彉閲忥紝濡傦細
<#list ["loop 1"] as x>
聽 ${x}
聽 <#list ["loop 2"] as x>
聽聽聽 ${x}
聽聽聽 <#list ["loop 3"] as x>
聽聽聽聽聽 ${x}
聽聽聽 </#list>
聽聽聽 ${x}
聽 </#list>
聽 ${x}
</#list>
杈撳嚭緇撴灉錛?br />loop 1
聽聽聽 loop 2
聽聽聽聽聽 loop 3
聽聽聽 loop 2
聽 loop 1
妯℃澘涓殑鍙橀噺浼氶殣钘忥紙鑰屼笉鏄鐩栵級鏁版嵁妯″瀷涓悓鍚嶅彉閲忥紝濡傛灉闇瑕佽闂暟鎹ā鍨嬩腑鐨勫悓鍚嶅彉閲忥紝浣跨敤鐗規畩鍙橀噺global錛屼笅闈㈢殑渚嬪瓙鍋囪鏁版嵁

妯″瀷涓殑user鐨勫兼槸Big Joe錛?br /><#assign user = "Joe Hider">
${user}聽聽聽聽聽聽聽聽聽 <#-- prints: Joe Hider -->
${.globals.user} <#-- prints: Big Joe -->
鍚嶅瓧絀洪棿
閫氬父鎯呭喌錛屽彧浣跨敤涓涓悕瀛楃┖闂達紝縐頒負涓誨悕瀛楃┖闂達紝浣嗕負浜嗗垱寤哄彲閲嶇敤鐨勫畯銆佸彉鎹㈠櫒鎴栧叾瀹冨彉閲忕殑闆嗗悎錛堥氬父縐板簱錛夛紝蹇呴』浣跨敤澶氬悕瀛楃┖闂達紝

鍏剁洰鐨勬槸闃叉鍚屽悕鍐茬獊
鍒涘緩搴?br />涓嬮潰鏄竴涓垱寤哄簱鐨勪緥瀛愶紙鍋囪淇濆瓨鍦╨ib/my_test.ftl涓級錛?br /><#macro copyright date>
聽 <p>Copyright (C) ${date} Julia Smith. All rights reserved.
聽 <br>Email: ${mail}</p>
</#macro>
<#assign mail = "jsmith@acme.com">
浣跨敤import鎸囦護瀵煎叆搴撳埌妯℃澘涓紝Freemarker浼氫負瀵煎叆鐨勫簱鍒涘緩鏂扮殑鍚嶅瓧絀洪棿錛屽茍鍙互閫氳繃import鎸囦護涓寚瀹氱殑鏁e垪鍙橀噺璁塊棶搴撲腑鐨勫彉閲忥細
<#import "/lib/my_test.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
杈撳嚭緇撴灉錛?br /><p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.
聽 <br>Email: mailto:jsmith@acme.com%3C/p>
jsmith@acme.com
fred@acme.com
鍙互鐪嬪埌渚嬪瓙涓嬌鐢ㄧ殑涓や釜鍚屽悕鍙橀噺騫舵病鏈夊啿紿侊紝鍥犱負瀹冧滑浣嶄簬涓嶅悓鐨勫悕瀛楃┖闂淬傝繕鍙互浣跨敤assign鎸囦護鍦ㄥ鍏ョ殑鍚嶅瓧絀洪棿涓垱寤烘垨鏇夸唬鍙橀噺

錛屼笅闈㈡槸涓涓緥瀛愶細
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="jsmith@other.com" in my>
${my.mail}
杈撳嚭緇撴灉錛?br />jsmith@acme.com
jsmith@other.com
鏁版嵁妯″瀷涓殑鍙橀噺浠諱綍鍦版柟閮藉彲瑙侊紝涔熷寘鎷笉鍚岀殑鍚嶅瓧絀洪棿錛屼笅闈㈡槸淇敼鐨勫簱錛?br /><#macro copyright date>
聽 <p>Copyright (C) ${date} ${user}. All rights reserved.</p>
</#macro>
<#assign mail = "mailto:$%7Buser%7D@acme.com">
鍋囪鏁版嵁妯″瀷涓殑user鍙橀噺鐨勫兼槸Fred錛屽垯涓嬮潰鐨勪唬鐮侊細
<#import "/lib/my_test.ftl" as my>
<@my.copyright date="1999-2002"/>
${my.mail}
杈撳嚭緇撴灉錛?br /><p>Copyright (C) 1999-2002 Fred. All rights reserved.</p>Fred@acme.com


----------------------------------------------------------------------------
鍥涳紟Freemarker涓嶴truts緇撳悎

1.杈撳嚭鏂囦歡鎹㈡垚浠tl鏍煎紡鐨勬枃浠?/p>

E.G.

<action name="bookActionForm" parameter="method" path="/bookAction" scope="request" type="example.BookAction"

validate="true">

<forward name="list" path="/index.ftl"/>

</action>

2.浣跨敤struts錛宩stl絳夋爣絳?/p>

a.瀵煎叆脿<#global html=JspTaglibs["/WEB-INF/tags/struts-html.tld"]>

鎴?lt;#assign html=JspTaglibs["/WEB-INF/struts-html.tld"]>
<#assign bean=JspTaglibs["/WEB-INF/struts-bean.tld"]>
<#assign logic=JspTaglibs["/WEB-INF/struts-logic.tld"]>

b.浣跨敤脿<@bean.page id="request" property="request"/>,
<@html.text property="vo.newsTitle" styleClass="input1"/>

----------------------------------------------------------------------------
浜旓紟鐢‵reemarker鐢熸垚Html欏甸潰

聽聽 渚嬪瓙錛歁akeFileManager.java

package example;

import freemarker.template.Configuration;
import java.text.SimpleDateFormat;
import java.io.File;
import freemarker.template.DefaultObjectWrapper;
import java.util.Map;
import java.util.HashMap;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import freemarker.template.TemplateException;
import java.io.IOException;
import freemarker.template.Template;

public class MakeFileManager {
聽聽聽 public String make(Book book, BookFtl bookFtl) {
聽聽聽聽聽聽聽 Configuration cfg = new Configuration();//閰嶅埗

聽聽聽聽聽聽聽 String realPath = bookFtl.getRealPath();
聽聽聽聽聽聽聽 String templatePath = realPath + "/WEB-INF/templates/book";
聽聽聽聽聽聽聽 String cDateStr = "book/" +
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new SimpleDateFormat("yyyyMMdd").format(new java.util.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Date());
聽聽聽聽聽聽聽 String filePostfix = ".html";
聽聽聽聽聽聽聽 String path = realPath + "/" + cDateStr;
聽聽聽聽聽聽聽 String fileTimeName = new SimpleDateFormat("yyyyMMddhhmmss").format(new
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 java.util.Date());
聽聽聽聽聽聽聽 String returnFileName = cDateStr + "/" + fileTimeName + filePostfix;
聽聽聽聽聽聽聽 String fileName = "";
聽聽聽聽聽聽聽 File bookDir = new File(path);
聽聽聽聽聽聽聽 if (bookDir.exists()) {
聽聽聽聽聽聽聽聽聽聽聽 fileName = path + "/" + fileTimeName + filePostfix;
聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽 bookDir.mkdirs();
聽聽聽聽聽聽聽聽聽聽聽 fileName = path + "/" + fileTimeName + filePostfix;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 //璁劇疆freemarker鐨勫弬鏁?br />聽聽聽聽聽聽聽聽聽聽聽 cfg.setNumberFormat("0.##########");//鐢熸垚html鏂囦歡鏃秝eb.xml閰嶅埗鏃犳晥
聽聽聽聽聽聽聽聽聽聽聽 //cfg.setEncoding();
聽聽聽聽聽聽聽聽聽聽聽 cfg.setDirectoryForTemplateLoading(new File(templatePath));
聽聽聽聽聽聽聽聽聽聽聽 cfg.setObjectWrapper(new DefaultObjectWrapper());
聽聽聽聽聽聽聽聽聽聽聽 Template bookTemplate = cfg.getTemplate(bookFtl.getTemplateName());//妯℃澘瀵硅薄
聽聽聽聽聽聽聽聽聽聽聽 Map root = new HashMap();
聽聽聽聽聽聽聽聽聽聽聽 root.put("book", book);
聽聽聽聽聽聽聽聽聽聽聽 root.put("book2",book);
聽聽聽聽聽聽聽聽聽聽聽 Writer out = new OutputStreamWriter(new FileOutputStream(fileName));
聽聽聽聽聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 bookTemplate.process(root, out);
聽聽聽聽聽聽聽聽聽聽聽 } catch (TemplateException e) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 e.printStackTrace();
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 out.flush();
聽聽聽聽聽聽聽 } catch (IOException e) {
聽聽聽聽聽聽聽聽聽聽聽 e.printStackTrace();
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return returnFileName;
聽聽聽 }
}



]]>
OGNL, JSTL, STRUTS2鏍囩鐢ㄦ硶紺轟緥http://m.tkk7.com/wjywilliam/articles/349036.htmlwjywilliamwjywilliamTue, 26 Apr 2011 06:24:00 GMThttp://m.tkk7.com/wjywilliam/articles/349036.htmlhttp://m.tkk7.com/wjywilliam/comments/349036.htmlhttp://m.tkk7.com/wjywilliam/articles/349036.html#Feedback0http://m.tkk7.com/wjywilliam/comments/commentRss/349036.htmlhttp://m.tkk7.com/wjywilliam/services/trackbacks/349036.html
OGNL, JSTL, STRUTS2鏍囩鐢ㄦ硶紺轟緥 錛堣漿杞斤級

鍙朣ession涓殑鍊?/strong>
<c:out value="${sessionScope.user.userId}"></c:out><br>聽聽
<c:out value="${user.userLoginName}"></c:out><br>聽聽聽聽
<s:property value="#session.user.userId"/><br>聽聽
${session.user.userId}<br>聽聽
${sessionScope.user.userId}<br>聽聽聽聽
鍩烘湰璇硶
涓銆丒L綆浠?br />1.璇硶緇撴瀯
聽聽聽 ${expression}
2.[]涓?榪愮畻絎?br />聽聽聽 EL 鎻愪緵.鍜孾]涓ょ榪愮畻絎︽潵瀛樺彇鏁版嵁銆?br />聽聽聽 褰撹瀛樺彇鐨勫睘鎬у悕縐頒腑鍖呭惈涓浜涚壒孌婂瓧絎︼紝濡?鎴?絳夊茍闈炲瓧姣嶆垨鏁板瓧鐨勭鍙鳳紝灝變竴瀹氳浣跨敤 []銆備緥濡傦細
聽聽聽聽聽聽聽 ${user.My-Name}搴斿綋鏀逛負${user["My-Name"] }
聽聽聽 濡傛灉瑕佸姩鎬佸彇鍊兼椂錛屽氨鍙互鐢╗]鏉ュ仛錛岃?鏃犳硶鍋氬埌鍔ㄦ佸彇鍊箋備緥濡傦細
聽聽聽聽聽聽聽 ${sessionScope.user[data]}涓璬ata 鏄竴涓彉閲?br />聽 3.鍙橀噺
聽聽聽 EL瀛樺彇鍙橀噺鏁版嵁鐨勬柟娉曞緢綆鍗曪紝渚嬪錛?{username}銆傚畠鐨勬剰鎬濇槸鍙栧嚭鏌愪竴鑼冨洿涓悕縐頒負username鐨勫彉閲忋?br />聽聽聽 鍥犱負鎴戜滑騫舵病鏈夋寚瀹氬摢涓涓寖鍥寸殑username錛屾墍浠ュ畠浼氫緷搴忎粠Page銆丷equest銆丼ession銆丄pplication鑼冨洿鏌ユ壘銆?br />聽聽聽 鍋囧閫斾腑鎵懼埌username錛屽氨鐩存帴鍥炰紶錛屼笉鍐嶇戶緇壘涓嬪幓錛屼絾鏄亣濡傚叏閮ㄧ殑鑼冨洿閮芥病鏈夋壘鍒版椂錛屽氨鍥炰紶null銆?br />聽聽聽 灞炴ц寖鍥村湪EL涓殑鍚嶇О
聽聽聽聽聽聽聽 Page聽聽聽聽聽聽聽聽聽聽聽聽聽聽pageScope
聽聽聽聽聽聽聽 Request聽聽聽聽聽聽聽聽聽 requestScope
聽聽聽聽聽聽聽 Session聽聽聽聽聽聽聽聽聽聽 sessionScope
聽聽聽聽聽聽聽 Application聽聽聽聽 applicationScope
聽聽聽聽聽聽聽
浜屻丒L闅愬惈瀵硅薄
1.涓庤寖鍥存湁鍏崇殑闅愬惈瀵硅薄
聽 涓庤寖鍥存湁鍏崇殑EL 闅愬惈瀵硅薄鍖呭惈浠ヤ笅鍥涗釜錛歱ageScope銆乺equestScope銆乻essionScope 鍜宎pplicationScope錛?br />聽 瀹冧滑鍩烘湰涓婂氨鍜孞SP鐨刾ageContext銆乺equest銆乻ession鍜宎pplication涓鏍鳳紱
聽 鍦‥L涓紝榪欏洓涓殣鍚璞″彧鑳界敤鏉ュ彇寰楄寖鍥村睘鎬у鹼紝鍗砱etAttribute(String name)錛屽嵈涓嶈兘鍙栧緱鍏朵粬鐩稿叧淇℃伅銆?br />聽
聽 渚嬪錛氭垜浠鍙栧緱session涓偍瀛樹竴涓睘鎬sername鐨勫鹼紝鍙互鍒╃敤涓嬪垪鏂規硶錛?br />聽聽聽 session.getAttribute("username") 鍙栧緱username鐨勫鹼紝
聽 鍦‥L涓垯浣跨敤涓嬪垪鏂規硶
聽聽聽 ${sessionScope.username}
2.涓庤緭鍏ユ湁鍏崇殑闅愬惈瀵硅薄
聽 涓庤緭鍏ユ湁鍏崇殑闅愬惈瀵硅薄鏈変袱涓細param鍜宲aramValues錛屽畠浠槸EL涓瘮杈冪壒鍒殑闅愬惈瀵硅薄銆?br />聽
聽 渚嬪鎴戜滑瑕佸彇寰楃敤鎴風殑璇鋒眰鍙傛暟鏃訛紝鍙互鍒╃敤涓嬪垪鏂規硶錛?br />聽聽聽 request.getParameter(String name)
聽聽聽 request.getParameterValues(String name)
聽 鍦‥L涓垯鍙互浣跨敤param鍜宲aramValues涓よ呮潵鍙栧緱鏁版嵁銆?br />聽聽聽 ${param.name}
聽聽聽 ${paramValues.name}

3.鍏朵粬闅愬惈瀵硅薄聽聽
聽 cookie
聽 JSTL騫舵病鏈夋彁渚涜瀹歝ookie鐨勫姩浣滐紝
聽 渚嬶細瑕佸彇寰梒ookie涓湁涓涓瀹氬悕縐頒負userCountry鐨勫鹼紝鍙互浣跨敤${cookie.userCountry}鏉ュ彇寰楀畠銆?/div>
聽 header鍜宧eaderValues
聽 header 鍌ㄥ瓨鐢ㄦ埛嫻忚鍣ㄥ拰鏈嶅姟绔敤鏉ユ矡閫氱殑鏁版嵁
聽 渚嬶細瑕佸彇寰楃敤鎴鋒祻瑙堝櫒鐨勭増鏈紝鍙互浣跨敤${header["User-Agent"]}銆?br />聽 鍙﹀鍦ㄩ矞灝戞満浼氫笅錛屾湁鍙兘鍚屼竴鏍囧ご鍚嶇О鎷ユ湁涓嶅悓鐨勫鹼紝姝ゆ椂蹇呴』鏀逛負浣跨敤headerValues 鏉ュ彇寰楄繖浜涘箋?/div>
聽 initParam
聽 initParam鍙栧緱璁懼畾web绔欑偣鐨勭幆澧冨弬鏁?Context)
聽 渚嬶細涓鑸殑鏂規硶String userid = (String)application.getInitParameter("userid");
聽聽聽 鍙互浣跨敤 ${initParam.userid}鏉ュ彇寰楀悕縐頒負userid
聽 pageContext
聽 pageContext鍙栧緱鍏朵粬鏈夊叧鐢ㄦ埛瑕佹眰鎴栭〉闈㈢殑璇︾粏淇℃伅銆?br />聽聽聽 ${pageContext.request.queryString}聽聽聽聽聽聽聽聽 鍙栧緱璇鋒眰鐨勫弬鏁板瓧絎︿覆
聽聽聽 ${pageContext.request.requestURL}聽聽聽聽聽聽聽聽 鍙栧緱璇鋒眰鐨刄RL錛屼絾涓嶅寘鎷姹備箣鍙傛暟瀛楃涓?br />聽聽聽 ${pageContext.request.contextPath}聽聽聽聽聽聽聽聽 鏈嶅姟鐨剋eb application 鐨勫悕縐?br />聽聽聽 ${pageContext.request.method}聽聽聽聽聽聽聽聽聽聽 鍙栧緱HTTP 鐨勬柟娉?GET銆丳OST)
聽聽聽 ${pageContext.request.protocol}聽聽聽聽聽聽聽聽 鍙栧緱浣跨敤鐨勫崗璁?HTTP/1.1銆丠TTP/1.0)
聽聽聽 ${pageContext.request.remoteUser}聽聽聽聽聽聽聽聽 鍙栧緱鐢ㄦ埛鍚嶇О
聽聽聽 ${pageContext.request.remoteAddr }聽聽聽聽聽聽聽聽 鍙栧緱鐢ㄦ埛鐨処P 鍦板潃
聽聽聽 ${pageContext.session.new}聽聽聽聽聽聽聽聽聽聽聽聽 鍒ゆ柇session 鏄惁涓烘柊鐨?br />聽聽聽 ${pageContext.session.id}聽聽聽聽聽聽聽聽聽聽聽聽聽聽 鍙栧緱session 鐨処D
聽聽聽 ${pageContext.servletContext.serverInfo}聽聽 鍙栧緱涓繪満绔殑鏈嶅姟淇℃伅

涓夈丒L榪愮畻絎?/strong>
聽 1.綆楁湳榪愮畻絎︽湁浜斾釜錛?銆?銆?鎴?銆?鎴杁iv銆?鎴杕od
聽 2.鍏崇郴榪愮畻絎︽湁鍏釜錛?=鎴杄q銆?=鎴杗e銆?lt;鎴杔t銆?gt;鎴杇t銆?lt;=鎴杔e銆?gt;=鎴杇e
聽 3.閫昏緫榪愮畻絎︽湁涓変釜錛?amp;&鎴朼nd銆亅|鎴杘r銆?鎴杗ot
聽 4.鍏跺畠榪愮畻絎︽湁涓変釜錛欵mpty榪愮畻絎︺佹潯浠惰繍綆楃銆?)榪愮畻絎?br />聽聽聽 渚嬶細${empty param.name}銆?{A?B:C}銆?{A*(B+C)}

鍥涖丒L鍑芥暟(functions)
聽 璇硶錛歯s:function( arg1, arg2, arg3 鈥? argN)
聽 鍏朵腑ns涓哄墠緗悕縐?prefix)錛屽畠蹇呴』鍜宼aglib 鎸囦護鐨勫墠緗悕縐頒竴緗?/div>
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?/div>
琛ュ厖錛?/strong>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
FOREACH:
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
鈥︹?br /></c:forEach>

OUT:
<c:out value="${logininfo.username}"/>
c:out>灝唙alue 涓殑鍐呭杈撳嚭鍒板綋鍓嶄綅緗紝榪欓噷涔熷氨鏄妸logininfo 瀵硅薄鐨?br />username灞炴у艱緭鍑哄埌欏甸潰褰撳墠浣嶇疆銆?br />${鈥︹鏄疛SP2.0 涓殑Expression Language錛圗L錛夌殑璇硶銆傚畠瀹氫箟浜嗕竴涓〃杈懼紡錛?br />鍏朵腑鐨勮〃杈懼紡鍙互鏄竴涓父閲忥紙濡備笂錛夛紝涔熷彲浠ユ槸涓涓叿浣撶殑琛ㄨ揪璇彞錛堝forEach寰幆浣撲腑
鐨勬儏鍐碉級銆傚吀鍨嬫渚嬪涓嬶細
? ${logininfo.username}
榪欒〃鏄庡紩鐢╨ogininfo 瀵硅薄鐨剈sername 灞炴с傛垜浠彲浠ラ氳繃鈥?鈥濇搷浣滅寮?br />鐢ㄥ璞$殑灞炴э紝涔熷彲浠ョ敤鈥淸]鈥濆紩鐢ㄥ璞″睘鎬э紝濡?{logininfo[username]}
涓?{logininfo.username}杈懼埌浜嗗悓鏍風殑鏁堟灉銆?br />鈥淸]鈥濆紩鐢ㄦ柟寮忕殑鎰忎箟鍦ㄤ簬錛屽鏋滃睘鎬у悕涓嚭鐜頒簡鐗規畩瀛楃錛屽鈥?鈥濇垨鑰呪?鈥濓紝
姝ゆ椂灝卞繀欏諱嬌鐢ㄢ淸]鈥濊幏鍙栧睘鎬у間互閬垮厤璇硶涓婄殑鍐茬獊錛堢郴緇熷紑鍙戞椂搴斿敖閲忛伩鍏?br />榪欎竴鐜拌薄鐨勫嚭鐜幫級銆?br />涓庝箣絳夊悓鐨凧SP Script澶ц嚧濡備笅錛?br />LoginInfo logininfo =
(LoginInfo)session.getAttribute(鈥渓ogininfo鈥?;
String username = logininfo.getUsername();
鍙互鐪嬪埌錛孍L澶уぇ鑺傜渷浜嗙紪鐮侀噺銆?br />榪欓噷寮曞嚭鐨勫彟澶栦竴涓棶棰樺氨鏄紝EL 灝嗕粠鍝噷鎵懼埌logininfo 瀵硅薄錛屽浜?br />${logininfo.username}榪欐牱鐨勮〃杈懼紡鑰岃█錛岄鍏堜細浠庡綋鍓嶉〉闈腑瀵繪壘涔嬪墠鏄?br />鍚﹀畾涔変簡鍙橀噺logininfo錛屽鏋滄病鏈夋壘鍒板垯渚濇鍒癛equest銆丼ession銆?br />Application 鑼冨洿鍐呭鎵撅紝鐩村埌鎵懼埌涓烘銆傚鏋滅洿鍒版渶鍚庝緷鐒舵病鏈夋壘鍒板尮閰嶇殑
鍙橀噺錛屽垯榪斿洖null.
濡傛灉鎴戜滑闇瑕佹寚瀹氬彉閲忕殑瀵繪壘鑼冨洿錛屽彲浠ュ湪EL琛ㄨ揪寮忎腑鎸囧畾鎼滃鑼冨洿錛?br />${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
鍦⊿pring 涓紝鎵鏈夐昏緫澶勭悊鍗曞厓榪斿洖鐨勭粨鏋滄暟鎹紝閮藉皢浣滀負Attribute 琚斁
緗埌HttpServletRequest 瀵硅薄涓繑鍥烇紙鍏蜂綋瀹炵幇鍙弬瑙丼pring 婧愮爜涓?br />org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes鏂規硶鐨勫疄鐜頒唬鐮侊級錛屼篃灝辨槸璇碨pring
MVC 涓紝緇撴灉鏁版嵁瀵硅薄榛樿閮芥槸requestScope銆傚洜姝わ紝鍦⊿pring MVC 涓紝
浠ヤ笅瀵誨潃鏂規硶搴旀厧鐢細
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1錛?}
緇撴灉涓鴻〃杈懼紡璁$畻緇撴灉錛屽嵆鏁存暟鍊?銆?br />? ${i>1}
濡傛灉鍙橀噺鍊糹>1鐨勮瘽錛屽皢榪斿洖bool綾誨瀷true銆備笌涓婁緥姣旇緝錛屽彲浠ュ彂鐜癊L浼氳嚜
鍔ㄦ牴鎹〃杈懼紡璁$畻緇撴灉榪斿洖涓嶅悓鐨勬暟鎹被鍨嬨?br />琛ㄨ揪寮忕殑鍐欐硶涓巎ava浠g爜涓殑琛ㄨ揪寮忕紪鍐欐柟寮忓ぇ鑷寸浉鍚屻?/div>
IF / CHOOSE:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
鍒ゅ畾鏉′歡涓鑸負涓涓狤L琛ㄨ揪寮忋?br /><c:if>騫舵病鏈夋彁渚沞lse瀛愬彞錛屼嬌鐢ㄧ殑鏃跺欏彲鑳芥湁浜涗笉渚匡紝姝ゆ椂鎴戜滑鍙互閫氳繃<c:choose>
tag鏉ヨ揪鍒扮被浼肩殑鐩殑錛?br /><c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
綾諱技Java 涓殑switch 璇彞錛?lt;c:choose>鎻愪緵浜嗗鏉傚垽瀹氭潯浠朵笅鐨勭畝鍖栧鐞嗘墜娉曘傚叾
涓?lt;c:when>瀛愬彞綾諱技case瀛愬彞錛屽彲浠ュ嚭鐜板嬈°備笂闈㈢殑浠g爜錛屽湪濂囨暟琛屾椂杈撳嚭鈥?鈥濆彿錛?br />鑰屽伓鏁拌鏃惰緭鍑衡?鈥濄?br />錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?/div>
鍐嶈ˉ鍏咃細
聽1聽聽聽 EL琛ㄨ揪寮忕敤${}琛ㄧず,鍙敤鍦ㄦ墍鏈夌殑HTML鍜孞SP鏍囩涓?浣滅敤鏄唬鏇縅SP欏甸潰涓鏉傜殑JAVA浠g爜.
聽聽聽聽聽聽聽 2聽聽 EL琛ㄨ揪寮忓彲鎿嶄綔甯擱噺 鍙橀噺 鍜岄殣寮忓璞? 鏈甯哥敤鐨?闅愬紡瀵硅薄鏈?{param}鍜?{paramValues}. ${param}琛ㄧず榪斿洖璇鋒眰鍙傛暟涓崟涓瓧絎︿覆鐨勫? ${paramValues}琛ㄧず榪斿洖璇鋒眰鍙傛暟鐨勪竴緇勫?pageScope琛ㄧず欏甸潰鑼冨洿鐨勫彉閲?requestScope琛ㄧず璇鋒眰瀵硅薄鐨勫彉閲? sessionScope琛ㄧず浼氳瘽鑼冨洿鍐呯殑鍙橀噺.applicationScope琛ㄧず搴旂敤鑼冨洿鐨勫彉閲?
聽聽聽聽聽聽聽 3聽聽 <%@聽 page isELIgnored="true"%> 琛ㄧず鏄惁紱佺敤EL璇█,TRUE琛ㄧず紱佹.FALSE琛ㄧず涓嶇姝?JSP2.0涓粯璁ょ殑鍚敤EL璇█.
聽聽聽聽聽聽聽 4聽聽 EL璇█鍙樉紺?閫昏緫琛ㄨ揪寮忓${true and false}緇撴灉鏄痜alse聽聽聽 鍏崇郴琛ㄨ揪寮忓${5>6} 緇撴灉鏄痜alse聽聽聽聽 綆楁湳琛ㄨ揪寮忓 ${5+5} 緇撴灉鏄?0
聽聽聽聽聽聽聽 5聽聽 EL涓殑鍙橀噺鎼滅儲鑼冨洿鏄?page request session application聽聽 鐐硅繍綆楃(.)鍜?[ ]"閮芥槸琛ㄧず鑾峰彇鍙橀噺鐨勫?鍖哄埆鏄痆 ]鍙互鏄劇ず闈炶瘝綾葷殑鍙橀噺
OGNL
OGNL鏄疧bject Graph Navigation Language鐨勭畝縐幫紝璇︾粏鐩稿叧鐨勪俊鎭彲浠ュ弬鑰冿細http://www.ognl.org銆傝繖閲屾垜浠彧娑夊強Struts2妗嗘灦涓OGNL鐨勫熀鏈敮鎸併?/div>
OGNL鏄竴涓璞★紝灞炴х殑鏌ヨ璇█銆傚湪OGNL涓湁涓涓被鍨嬩負Map鐨凜ontext錛堢О涓轟笂涓嬫枃錛夛紝鍦ㄨ繖涓笂涓嬫枃涓湁涓涓牴鍏冪礌錛坮oot錛夛紝瀵規牴鍏冪礌鐨勫睘鎬х殑璁塊棶鍙互鐩存帴浣跨敤灞炴у悕瀛楋紝浣嗘槸瀵逛簬鍏朵粬闈炴牴鍏冪礌灞炴х殑璁塊棶蹇呴』鍔犱笂鐗規畩絎﹀彿#銆?/div>
鍦⊿truts2涓笂涓嬫枃涓篈ctionContext錛屾牴鍏冪礌浣峍alue Stack錛堝煎爢鏍堬紝鍊煎爢鏍堜唬琛ㄤ簡涓鏃忓璞¤屼笉鏄竴涓璞★紝鍏朵腑Action綾葷殑瀹炰緥涔熷睘浜庡煎爢鏍堢殑涓涓級銆侫ctionContext涓殑鍐呭濡備笅鍥撅細
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--application
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--session
context map---|
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--value stack(root)
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--request
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--parameters
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽 |--attr (searches page, request, session, then application scopes)
聽聽聽聽聽聽聽聽聽聽聽聽聽 |
鍥犱負Action瀹炰緥琚斁鍦╒alue Stack涓紝鑰孷alue Stack鍙堟槸鏍瑰厓绱狅紙root錛変腑鐨勪竴涓紝鎵浠ュAction涓殑灞炴х殑璁塊棶鍙互涓嶄嬌鐢ㄦ爣璁?錛岃屽鍏朵粬鐨勮闂兘蹇呴』浣跨敤#鏍囪銆?/div>
寮曠敤Action鐨勫睘鎬?/div>
<s:property value="postalCode"/>
ActionContext涓殑鍏朵粬闈炴牴錛坮oot錛夊厓绱犵殑灞炴у彲浠ユ寜鐓у涓嬬殑鏂瑰紡璁塊棶錛?/div>
<s:property value="#session.mySessionPropKey"/> or
<s:property value="#session["mySessionPropKey"]"/> or
<s:property value="#request["mySessionPropKey"]/>
Action綾誨彲浠ヤ嬌鐢ˋctionContext涓殑闈欐佹柟娉曟潵璁塊棶ActionContext銆?/div>
ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject);
OGNL涓嶤ollection錛圠ists錛孧aps錛孲ets錛?/div>
鐢熸垚List鐨勮娉曚負: {e1,e2,e3}.
<s:select label="label" name="name"
list="{'name1','name2','name3'}" value="%{'name2'}" />
涓婇潰鐨勪唬鐮佺敓鎴愪簡涓涓狧TML Select瀵硅薄錛屽彲閫夌殑鍐呭涓猴細 name1錛宯ame2錛宯ame3錛岄粯璁ゅ間負錛歯ame2銆?/div>
鐢熸垚Map鐨勮娉曚負錛?{key1:value1,key2:value2}.
<s:select label="label" name="name"
list="#{'foo':'foovalue', 'bar':'barvalue'}" />
涓婇潰鐨勪唬鐮佺敓鎴愪簡涓涓狧TML Select瀵硅薄,foo鍚嶅瓧琛ㄧず鐨勫唴瀹逛負錛歠oovalue錛宐ar鍚嶅瓧琛ㄧず鐨勫唴瀹逛負錛歜arvalue銆?/div>
鍒ゆ柇涓涓璞℃槸鍚﹀湪List鍐呭瓨鍦細
<s:if test="'foo' in {'foo','bar'}">
聽聽 muhahaha
</s:if>
<s:else>
聽聽 boo
</s:else>
<s:if test="'foo' not in {'foo','bar'}">
聽聽 muhahaha
</s:if>
<s:else>
聽聽 boo
</s:else>
鍙栧緱涓涓狶ist鐨勪竴閮ㄥ垎錛?/div>
?聽 鈥撀?鎵鏈夋弧瓚抽夋嫨閫昏緫鐨勫璞?
^聽 -聽聽 絎竴涓弧瓚抽夋嫨閫昏緫鐨勫璞?
$聽 -聽聽 鏈鍚庝竴涓弧瓚抽夋嫨閫昏緫鐨勫璞?/div>
渚嬪錛?/div>
person.relatives.{? #this.gender == 'male'}
涓婅堪浠g爜鍙栧緱榪欎釜浜猴紙person錛夋墍鏈夌殑鐢鋒э紙this.gender==male錛夌殑浜叉垰(relatives)
Lambda 琛ㄨ揪寮?/strong>
OGNL鏀寔綆鍗曠殑Lambda琛ㄨ揪寮忚娉曪紝浣跨敤榪欎簺璇硶鍙互寤虹珛綆鍗曠殑lambda鍑芥暟銆?/div>
渚嬪錛?/div>
Fibonacci:
if n==0 return 0;
elseif n==1 return 1;
else return fib(n-2)+fib(n-1);
fib(0) = 0
fib(1) = 1
fib(11) = 89
OGNL鐨凩ambda琛ㄨ揪寮忓浣曞伐浣滃憿錛?/div>
Lambda琛ㄨ揪寮忓繀欏繪斁鍦ㄦ柟鎷彿鍐呴儴錛?this琛ㄧず琛ㄨ揪寮忕殑鍙傛暟銆備緥濡傦細
<s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />
#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)]瀹氫箟浜嗕竴涓狶ambda琛ㄨ揪寮忥紝
#fib(11) 璋冪敤浜嗚繖涓〃杈懼紡銆?/div>
鎵浠ヤ笂榪頒唬鐮佺殑杈撳嚭涓猴細89
鍦↗SP2.1涓?琚敤浣滀簡JSP EL錛堣〃杈懼紡璇█錛夌殑鐗規畩璁板ソ錛屾墍浠ュOGNL鐨勪嬌鐢ㄥ彲鑳藉鑷撮棶棰橈紝
涓涓畝鍗曠殑鏂規硶鏄鐢↗SP2.1鐨凟L鐗規э紝榪欓渶瑕佷慨鏀箇eb.xml鏂囦歡錛?/div>
<jsp-config>
聽聽聽 <jsp-property-group>
聽聽聽聽聽 <url-pattern>*.jsp</url-pattern>
聽聽聽聽聽 <el-ignored>true</el-ignored>
聽聽聽 </jsp-property-group>
</jsp-config>



]]>Struts2: 鍦╦avascript涓搷浣?datetimepicker 鏍囩鎺т歡鐨勫?/title><link>http://m.tkk7.com/wjywilliam/articles/233919.html</link><dc:creator>wjywilliam</dc:creator><author>wjywilliam</author><pubDate>Sun, 12 Oct 2008 15:18:00 GMT</pubDate><guid>http://m.tkk7.com/wjywilliam/articles/233919.html</guid><wfw:comment>http://m.tkk7.com/wjywilliam/comments/233919.html</wfw:comment><comments>http://m.tkk7.com/wjywilliam/articles/233919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wjywilliam/comments/commentRss/233919.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wjywilliam/services/trackbacks/233919.html</trackback:ping><description><![CDATA[    鍙湁娉ㄥ唽鐢ㄦ埛鐧誨綍鍚庢墠鑳介槄璇昏鏂囥?a href='http://m.tkk7.com/wjywilliam/articles/233919.html'>闃呰鍏ㄦ枃</a><img src ="http://m.tkk7.com/wjywilliam/aggbug/233919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wjywilliam/" target="_blank">wjywilliam</a> 2008-10-12 23:18 <a href="http://m.tkk7.com/wjywilliam/articles/233919.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://fsdyzs.com" target="_blank">国产黄在线播放免费观看</a>| <a href="http://dehaichem.com" target="_blank">亚洲国产乱码最新视频</a>| <a href="http://www-2236444.com" target="_blank">老湿机一区午夜精品免费福利</a>| <a href="http://clever-ad.com" target="_blank">麻豆国产精品免费视频</a>| <a href="http://zzhjnmzp.com" target="_blank">中国国产高清免费av片</a>| <a href="http://wwkk3.com" target="_blank">亚洲日韩在线观看</a>| <a href="http://cn-taoqigui.com" target="_blank">日本激情猛烈在线看免费观看 </a>| <a href="http://pc521.com" target="_blank">国产成人综合久久精品亚洲</a>| <a href="http://333uy.com" target="_blank">成人免费一区二区三区在线观看</a>| <a href="http://www003924.com" target="_blank">亚洲精品久久无码</a>| <a href="http://xiaochidaquan.com" target="_blank">日本一道综合久久aⅴ免费</a>| <a href="http://xx16xx.com" target="_blank">最新亚洲人成无码网站</a>| <a href="http://www779rr.com" target="_blank">亚洲av麻豆aⅴ无码电影</a>| <a href="http://szzrjk.com" target="_blank">一级毛片aaaaaa视频免费看</a>| <a href="http://633223.com" target="_blank">亚洲熟妇无码乱子AV电影</a>| <a href="http://wkk3.com" target="_blank">日本一区午夜艳熟免费</a>| <a href="http://www-135888.com" target="_blank">婷婷久久久亚洲欧洲日产国码AV </a>| <a href="http://xxxck.com" target="_blank">亚洲欧洲精品成人久久曰</a>| <a href="http://pchbgs.com" target="_blank">成人免费在线观看网站</a>| <a href="http://323799.com" target="_blank">边摸边吃奶边做爽免费视频99</a>| <a href="http://www282pp.com" target="_blank">亚洲国产日韩成人综合天堂</a>| <a href="http://fuhui123.com" target="_blank">亚洲精品亚洲人成在线播放</a>| <a href="http://aa7852.com" target="_blank">免费无码成人AV片在线在线播放</a>| <a href="http://shaiyahx.com" target="_blank">国产精品亚洲а∨天堂2021 </a>| <a href="http://770144.com" target="_blank">亚洲天堂免费在线视频</a>| <a href="http://yy7699.com" target="_blank">精品亚洲综合久久中文字幕</a>| <a href="http://dzhankong.com" target="_blank">亚洲AV成人无码网站</a>| <a href="http://ruidamo.com" target="_blank">国产日产亚洲系列最新</a>| <a href="http://yy12345.com" target="_blank">91免费福利精品国产</a>| <a href="http://qnyjny.com" target="_blank">亚洲国产欧洲综合997久久</a>| <a href="http://gycat.com" target="_blank">区三区激情福利综合中文字幕在线一区亚洲视频1 </a>| <a href="http://wwwy6x22.com" target="_blank">中文字幕亚洲一区</a>| <a href="http://www-959kj.com" target="_blank">久久不见久久见免费视频7</a>| <a href="http://s88s88.com" target="_blank">亚洲色偷偷色噜噜狠狠99</a>| <a href="http://sxhengshan.com" target="_blank">亚洲精品99久久久久中文字幕 </a>| <a href="http://628669.com" target="_blank">成人性做爰aaa片免费看</a>| <a href="http://445645.com" target="_blank">亚洲一级在线观看</a>| <a href="http://sese3366.com" target="_blank">中文字幕天天躁日日躁狠狠躁免费</a>| <a href="http://zxzzzzx.com" target="_blank">亚洲国产精品专区</a>| <a href="http://400209.com" target="_blank">亚洲精品成人在线</a>| <a href="http://vinsotec.com" target="_blank">亚州免费一级毛片</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>