锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
1.婊¤凍鎼滅儲寮曟搸鐨勮姹?
2.闅愯棌鎶鏈疄鐜幫紝鎻愰珮緗戠珯鐨勭Щ妞嶆?
3.婊¤凍緹庢劅鐨勮姹?涓漢鎰熻榪欎釜鐢ㄥ澶壍寮?
欏圭洰閮ㄧ講
1.棣栧厛鍦╤ttp://tuckey.org/urlrewirte/涓嬭澆urlrewirtefilter
2.瑙e帇鎵涓嬭澆鐨勬枃浠?鎶妘rlrewrite-2.6.0.jar澶嶅埗鍒伴」鐩殑WebRoot/WEB-INF/lib/鐩綍涓?鐒跺悗緙栬瘧
3.鎶妘rlrewrite.xml澶嶅埗鍒伴」鐩殑WebRoot/WEB-INF/鐩綍涓?
4.鍦╳eb.xml鏂囦歡涓姞鍏ヤ互涓?
type="redirect"
>/user/list.jsp</to> type="redirect"
>/user/view.jsp?cid=$1&cname=$2</to> 2銆丗oreach 鍜孎or涓鏍蜂嬌鐢?/p>
3銆丠idden緇勪歡 鎬繪槸澶氫綑S鐨勫鐞?br /> <input jwcid="@Hidden" type="hidden" value="ognl:blahblah" encode="false"/>
4銆?Insert 緇勪歡
e.g.
<input type="text" jwcid="name@Insert" value="ognl:user.name"/>
欏甸潰琛ㄧ幇鏃?灝嗕細鍒伴〉闈㈢被涓鎵緂etUser().getName()鏂規硶鑾峰彇鍒濆煎茍杈撳嚭
鐩稿綋浜庡湪欏甸潰涓婃樉紺烘暟鎹?
5銆?TextField 緇勪歡
e.g.
<input type="text" jwcid="username@TextField" value="ognl:username"/>
欏甸潰琛ㄧ幇鏃?灝嗕細鍒伴〉闈㈢被涓鎵緂etUsername()鏂規硶鑾峰彇鍒濆?
*濡傛灉鏄慨鏀逛俊鎭〉闈?閫氬父鍒濆鍊艱鍦ㄩ〉闈㈣〃鐜頒箣鍓嶇敱setUsername()鎵嬪姩璁劇疆浠庢暟鎹簱涓鍙栧嚭鏉ョ殑鍊?
琛ㄥ崟鎻愪氦鏃?閫氳繃setUsername()鍐欏叆鏂板?鍗崇敤鎴瘋緭鍏ュ?,鍦ㄧ被涓氳繃getUsername()鑾峰彇鏂板?
鐩稿綋浜庡湪淇敼涓漢淇℃伅鏃?棣栧厛璇誨嚭鐢ㄦ埛鍚嶈祴浜堟枃鏈(鐢ㄦ埛鍚?鍒濆?鐢ㄦ埛淇敼鏃跺~鍏ユ柊鍊?鍚庡彴鑾峰彇涔?
*Hidden灞炴у尯鍒嗘槸鏅氭枃鏈緭鍏ユ(榛樿false)鍜屽瘑鐮佽緭鍏ユ(hidden="ognl:true")
readonly灞炴ц緗彧璇?readonly="true"涓哄彧璇?鍚庡彴鍙鍙?
*disabled灞炴ц緗槸鍚﹀彲鍐?diabled="true"涓轟笉鍙啓(鍚庡彴涔熶笉鍙鍙?
6銆?TextArea 緇勪歡
e.g.
<textarea jwcid="content@TextArea" value="ognl:content" cols="40" rows="10"></textarea>
欏甸潰琛ㄧ幇鏃?灝嗕細鍒伴〉闈㈢被涓鎵緂etContent()鏂規硶鑾峰彇鍒濆?
宸ヤ綔鍘熺悊鍚孴extField
7銆?RadioGroup/Radio 緇勪歡
e.g.
<span jwcid="headImage@RadioGroup" selected="ognl:headImage">
<input jwcid="@Radio" type="radio" value="1"/>澶村儚1
<input jwcid="@Radio" type="radio" value="2"/>澶村儚2
<input jwcid="@Radio" type="radio" value="3"/>澶村儚3
<input jwcid="@Radio" type="radio" value="4"/>澶村儚4
<input jwcid="@Radio" type="radio" value="5"/>澶村儚5
<input jwcid="@Radio" type="radio" value="6"/>澶村儚6
</span>
RadioGroup涓烘瘡涓涓猂adio鎻愪緵涓涓敮涓鐨処D銆俁adioGroup璺熻釜褰撳墠琚変腑鐨勫睘鎬у鹼紝騫朵笖鍙湁涓涓猂adio鑳藉琚変腑.
欏甸潰鎻愪氦鏃訛紝RadioGroup緇勪歡灝卞埄鐢∣GNL琛ㄨ揪寮忓悜headImage瀛楁鍐欏叆琚変腑鐨凴adio緇勪歡鐨剉alue鍙傛暟鍊?
欏甸潰琛ㄧ幇鏃?淇敼欏甸潰),灝嗕細鍒伴〉闈㈢被涓鎵緂etHeadImage()鏂規硶鑾峰彇鍒濆?鐒跺悗瀵繪壘@Radio緇勪歡涓笌鍏剁浉鍚岀殑緇勪歡騫跺嬀閫変笂.
8銆?PropertySelection 緇勪歡
浣跨敤PropertySelection緇勪歡蹇呴』瑕佹瀯閫犱竴涓被鏉ュ疄鐜癐PropertySelectionModel鎺ュ彛錛屽茍涓旈噸鍐欒鎺ュ彛鐨?涓柟娉?
public int getOptionCount() //鎻愪緵涓嬫媺鑿滃崟鐨勯暱搴?
public Object getOption(int index) //鎻愪緵select鏍囩鐨刼ption
public String getLabel(int index) //鎻愪緵select鏍囩鐨凩abel鍊鹼紝涔熷氨鏄笅鎷夎彍鍗曟樉紺虹殑鍐呭
public String getValue(int index) //鎻愪緵select鏍囩鐨剉alue鍊?
public Object translateValue(String value) //selected鍚庣殑榪斿洖鍊鹼紝value鍊兼湭蹇呭氨鏄垜浠渶瑕佺殑榪斿洖鍊鹼紝鍙互鍦ㄨ繖涓柟娉曢噷闈㈠榪斿洖鐨剉alue鍋氬搴旂殑杞崲鎴栦慨鏀?
e.g.1. 鎬у埆涓嬫媺妗?
<select jwcid="gender@ProPertySelection" name="genderSelect" value="ognl:gender" model="supportedGender">
<option selected>鍏堢敓</option>
<option>濂沖+</option>
</select>
浠g爜
GenderSelectionModel.java
public class GenderSelectionModel implements IPropertySelectionModel {
public static final String male = "鍏堢敓";
public static final String female = "濂沖+";
public static final String[] genderOptions = { male, female };
public int getOptionCount() {
return genderOptions.length;
}
public Object getOption(int index) {
return this.translateValue(genderOptions[index]);
}
public String getLabel(int index) {
return genderOptions[index].toString();
}
public String getValue(int index) {
return genderOptions[index];
}
public Object translateValue(String value) {
if (value.equals("鍏堢敓")) {
return "1";
} else {
return "0";
}
}
}
浠g爜
ModUserInfo.java
public IPropertySelectionModel getSupportedGender() {
return new GenderSelectionModel();
}
瀛樺叆鏁版嵁搴撲腑"1"浠h〃鍏堢敓,"0"浠h〃濂沖+,閫氳繃translateValue(String value)鏂規硶杞崲
欏甸潰琛ㄧ幇鏃?閫氳繃model灞炴х粰鍑虹殑IPropertySelectionModel鑾峰彇涓嬫媺閫夐」,鍗砱etSupportedGender().
鐒跺悗閫氳繃getGender()鏂規硶鑾峰彇鍒濆?姣斿鑾峰彇"0",鍒欏湪欏甸潰鏄劇ず鏃跺鎵緑alue鍊間負"0"鐨勯夐」鍗充負"濂沖+",騫墮夋嫨涔嬩綔涓哄垵濮嬮夋嫨欏?
e.g.2. 鏃ュ織綾誨瀷涓嬫媺妗?
<select jwcid="logType@PropertySelection" name="typeSelect" value="ognl:logType" model="supportedType">
<option>蹇冩儏鏃ヨ</option>
<option>鎯呮劅澶╁湴</option>
<option>鐢熸椿鎰熻Е</option>
</select>
浠g爜
TypeSelectionModel.java
public class TypeSelectionModel implements IPropertySelectionModel {
private List typeList = new ArrayList();
public TypeSelectionModel(List typeList) {
this.typeList = typeList;
}
public int getOptionCount() {
return typeList.size();
}
public Object getOption(int index) {
return ((LogType)typeList.get(index)).getValue();
}
public String getLabel(int index) {
return ((LogType) typeList.get(index)).getName();
}
public String getValue(int index) {
return ((LogType) typeList.get(index)).getValue();
}
public Object translateValue(String value) {
return value;
}
}
浠g爜
ModLog.java
public IPropertySelectionModel getSupportedType() {
TypeSelectionModel typeSelectionModel =
new TypeSelectionModel(loadType(getUser().getUserId()));
return typeSelectionModel;
}
private List loadType(int userid) {
...//浠庢暟鎹簱杞藉叆璇ョ敤鎴風殑鏃ュ織綾誨瀷鍒楄〃
}
欏甸潰琛ㄧ幇鏃?閫氳繃model灞炴х粰鍑虹殑IPropertySelectionModel鑾峰彇涓嬫媺閫夐」,鍗砱etSupportedType().
鐒跺悗閫氳繃value灞炴х粰鍑虹殑鍒濆鍊煎嵆,getLogType()鏂規硶鑾峰彇鍒濆?姣斿鑾峰彇"2",鍒欏湪欏甸潰鏄劇ず鏃跺鎵緑alue鍊間負"2"鐨勯夐」鍗充負"鐢熸椿鎰熻Е",騫墮夋嫨涔嬩綔涓哄垵濮嬮夋嫨欏?
9銆?Form緇勪歡
e.g.
<form jwcid="logForm@Form">
...
</form>
Form鐨勭洃鍚?listener)鏂規硶鍙互鏈変袱縐嶆柟寮?
1. 鍦‵orm緇勪歡涓0鏄?
<form jwcid="logForm@Form" listener="ognl:listener:onLogin">
...
</form>
2. 鍦╯ubmit綾誨瀷緇勪歡涓0鏄?
<input type="submit" jwcid="onLogin@Submit" listener="listener:onLogin" value="鍙戣〃"/>鎴栬?
<span jwcid="@ImageSubmit" image="..." listener="listener:onLogin"><img src="..." width="" height=""/></span>
鍓嶄竴縐嶆柟寮忓綋Form涓彧瑕佹湁submit灝變細瑙﹀彂鐩戝惉鏂規硶,鍚庝竴縐嶆柟寮忔槸Form涓湁澶氫釜submit,鍚勮嚜瀹炵幇涓嶅悓鐨勭洃鍚柟娉?
G) Foreach 緇勪歡
e.g.
<span jwcid="@Foreach" source="ognl:logList" value="ognl:item">
寰幆緇勪歡,閬嶅巻source鍙傛暟,鍦ㄨ〃鐜板叾鍐呭鍓嶆洿鏂皏alue鍙傛暟,灝咶oreach緇勪歡鎵鍖呭惈鐨勫唴瀹歸噸澶嶈〃鐜?鍏朵腑鍙互閫氳繃value鍙傛暟鑾峰彇鎵闇鏄劇ず鍐呭.
鏈緥涓?欏甸潰琛ㄧ幇鏃墮氳繃getLogList()鏂規硶鑾峰彇鏃ュ織鍒楄〃,寰幆鍙栧嚭鍏朵腑鏁版嵁鏇存柊item(鏃ュ織瀵硅薄)騫朵簣浠ユ樉紺?鍏朵腑item闇瑕佸湪欏甸潰瑙勮寖(.page)鏂囦歡涓0鏄?
<property name="item"/>
*class鍙傛暟鐢ㄦ潵瀵繪壘綾諱技CSS鐨勬枃浠跺Foreach榪涜淇グ.
Foreach緇勪歡: class="ognl:beans.evenOdd.next"
Page鏂囦歡: <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
CSS鏂囦歡: tr.odd{background-color: #ffffff;}tr.even{background-color: #eeeeee;}
10銆?Conditional 緇勪歡
e.g.
<span jwcid="@Conditional" condition='ognl:item.sex.equals("1")'>鍏堢敓</span>
<span jwcid="@Conditional" condition='ognl:item.sex.equals("0")'>濂沖+</span>
conditional鍙傛暟涓簍rue鏃惰繍琛孋onditional緇勪歡涓殑HTML妯℃澘鍐呭.
鍦═apestry4.0浠ュ悗灝變笉鏀寔璇ョ粍浠朵簡, 鍙互浣跨敤鍏朵粬緇勪歡鏉ュ疄鐜?
1. Contrib:Choose鍜孋ontrib:When
<library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/>(.application鏂囦歡涓紩鍏ontrib綾誨寘)
<span jwcid="@contrib:Choose">
<span jwcid="@contrib:When" condition='ognl:user.gender.equals("1")'>鍏堢敓</span>
<span jwcid="@contrib:When" condition='ognl:user.gender.equals("0")'>濂沖+</span>
</span>
2. If緇勪歡
<span jwcid="@If" condition='ognl:item.sex.equals("1")'>鍏堢敓</span>
<span jwcid="@If" condition='ognl:item.sex.equals("0")'>濂沖+</span>
3. Else緇勪歡
<span jwcid="@Else">man</span>
銆?===========================ts鐨勫嚱鏁版墽琛岄『搴?=======================================銆?br />
瀵逛箣鍓嶇殑璇ユ枃绔犺繘琛屼簡涓浜涗慨姝o紝涓昏鏄拡瀵筬inishLoad()鏂規硶銆?
鎴戣寰楀鍒濆鑰呬細鏈変竴浜涘府鍔┿?
涓嬮潰榪欏嚑涓嚱鏁版槸鎴戝湪浣跨敤鐨勶紝瀹冧滑鐨勬墽琛岄『搴忎緷嬈′粠涓婂埌涓嬨?
1.protected void finishLoad() {} ***
2.public void pageValidate(PageEvent event) {}
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}
4.public void pageBeginRender(PageEvent event) {}
// 濡傛灉鏈夎〃鍗曟彁浜わ紝鍒欏皢form涓殑鍚勫瓧孌電殑鍊艱祴緇欓〉闈㈢被
5. ...... 璧嬪?
6.public void submit() // 琛ㄥ崟鎻愪氦絳夌敤listenter:璋冪敤鐨勬柟娉?
7.protected void prepareForRender(IRequestCycle cycle) {}
----------------------------------------------------
1.protected void finishLoad() {}
榪欎釜鍑芥暟鏈鍏堟墽琛岋紝浣嗘槸瀹冨疄闄呬笂娌℃湁浠涔堢敤澶勶紙鎴戞劅瑙夛級銆傚洜涓猴細
銆銆榪欎釜鍑芥暟鍙湪欏甸潰姹犱腑娌℃湁鏌愪竴涓〉闈㈢被銆侀渶瑕佺敓鎴愪竴涓柊鐨勯〉闈㈠璞℃椂鎵嶈皟鐢ㄣ傝繖閲屽氨鏈変竴涓櫡闃憋細濡傛灉浣犵殑tomcat鍚姩鏃朵嬌鐢ㄤ簡-Dorg.apache.tapestry.disable-caching=true(涓轟簡璋冭瘯鏂逛究鑰岃)錛岄偅涔堜綘姣忔鍒鋒柊欏甸潰鏃訛紝瀹冮兘浼氭墽琛岋紙鍥犱負姣忎釜request閮戒細鏂扮敓鎴愪竴涓〉闈㈢被瀵硅薄錛夛紝閫犳垚浜嗗畠鎬繪槸鎵ц鐨勫亣璞°傚湪瀹為檯鐨勯儴緗叉椂錛屼細浣跨敤caching錛屽垯榪欎釜鍑芥暟鎵ц鐨勬満浼氬緢灝戙傛墍浠ヨ娉ㄦ剰銆?
銆銆鍒濆鍖栫殑浠g爜鏀懼湪4 pageBeginRender()涓?
2.public void pageValidate(PageEvent event) {}
濡傛灉瀹炵幇浜哖ageValidateListener鎺ュ彛錛屽垯鍙互鍦ㄨ繖閲岃繘琛岄獙璇侊紝姣斿璁塊棶鏉冮檺絳夈傛墽琛屽畬1鍚庯紝瀹冨氨寮濮嬫墽琛屻?
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}
濡傛灉瀹炵幇浜咺ExternalPage鎺ュ彛錛屽垯鍙互浠庤繖閲屽彇寰楃敱澶栭潰浼犺繃鏉ョ殑鍙傛暟銆傛墽琛?鍚庯紝鎵ц鍒拌繖閲屻傚湪榪欓噷鍙互鎶婇偅浜涘弬鏁板彇鍑猴紝璧嬬粰欏甸潰綾匯?
4.public void pageBeginRender(PageEvent event) {}
鎵ц瀹?鍚庯紝灝嗘墽琛屾湰鍑芥暟銆備絾鏄繖鏃朵粠瀹㈡埛绔紶榪囨潵鐨勫弬鏁拌繕娌℃湁琚祴鍊?濡傛灉鎻愪氦浜嗚〃鍗曠殑璇?銆傝繖閲屽彲浠ヨ繘琛屼竴浜涘垵濮嬪寲鎿嶄綔銆?
5.鎵ц瀹?鍚庯紝濡傛灉鏈夎〃鍗曟彁浜わ紝鍦ㄨ繖閲屽皢浼氬彇鍑洪偅浜涘鹼紝璧嬬粰瀵瑰簲鐨勫瓧孌點?娉ㄦ剰錛氬彧鏄皢琛ㄥ崟涓湁鐨勫艱祴榪囨潵)
6.public void submit()
濡傛灉鏈夎〃鍗曟彁浜ょ殑璇濓紝鍦ㄨ繖閲屽皢榪涜瀵瑰簲鐨勬搷浣溿傚洜涓烘鏃跺悇瀛楁宸茬粡鍙栧ソ鍊間簡錛屾墍浠ュ彲浠ユ嬁鏉ョ洿鎺ョ敤銆?
7.protected void prepareForRender(IRequestCycle cycle) {}
鏈鍚庢墠鎵ц榪欎釜鏂規硶銆傛垜浠彲浠ュ湪鍏朵腑榪涜涓轟簡鍦ㄩ〉闈笂鏄劇ず鏁版嵁鑰岃繘琛岀殑鎿嶄綔錛屾瘮濡傚彇寰椾粈涔堝璞′粈涔堢殑錛屽洜涓鴻繖閲岄〉闈㈢被鐨勫睘鎬ц祴鍊煎凡緇忕粨鏉燂紝鍙互鐩存帴鎷挎潵浣跨敤浜嗐?
娉ㄦ剰錛氬鏋滄墽琛屼簡6錛屽垯榪樿鎵ц4錛屽啀鎵ц7銆傚鏋滄病鏈?錛?瀹屼簡灝辯洿鎺ユ槸7銆?
浠ヤ笂鏄垜鎵鎬葷粨鐨勬墽琛岄『搴忥紝涓嶅綋涔嬪璇鋒寚鍑恒?nbsp;
-----------------------------------------------------
鏈寮濮嬪tapestry鐨勬椂鍊欙紝瑙夊緱“鎬庝箞鏈夎繖涔堝鍦版柟闇瑕佹寔涔呭晩”銆傚師鏉ヤ互鍓嶅彧鐭ラ亾pageBeginRender榪欎釜鍑芥暟錛屼粈涔堝垵濮嬪寲鎿嶄綔閮芥斁鍦ㄥ畠閲岄潰銆傚彲鏄畠鏄湪璧嬪間箣鍓嶆墽琛岋紝鎵浠ユ嬁鍒扮殑瀛楁澶氶兘鏄┖鐨勶紝鍗撮兘浠ヤ負鏄病鏈夋寔涔呭寲鐨勭紭鏁呫傛墍浠ュ湪瀹㈡埛绔噷鏀句簡涓澶у爢鐨凘Hidden錛屾垨鑰卻ession涓寔涔咃紝闈炲父楹葷儲錛岋紝錛屽tapestry涔熶駭鐢熺殑鎬鐤戙傜幇鍦ㄦ墠鐭ラ亾閭d簺闇瑕佸彇寰楀鎴風浼犳潵鐨勫弬鏁扮殑浠g爜錛屾渶濂芥斁鍦╬repareForRender閲岋紝寰堝涓嶅繀瑕佺殑鎸佷箙閮藉彲浠ョ渷鎺変簡
package dom_xml;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import java.util.List;
import java.util.Iterator;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.*;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.DocumentHelper;
public class XmlDom4J {
/**
* 鐢熸垚xml鏂囦歡錛?br />
*
*/
public void createXMLFile(){
//浣跨敤 DocumentHelper 綾誨垱寤轟竴涓枃妗e疄渚嬨?DocumentHelper 鏄敓鎴?XML 鏂囨。鑺傜偣鐨?dom4j API 宸ュ巶綾匯?br />
Document document=DocumentHelper.createDocument();
//浣跨敤 addElement() 鏂規硶鍒涘緩鏍瑰厓绱?catalog 銆俛ddElement() 鐢ㄤ簬鍚?XML 鏂囨。涓鍔犲厓绱犮?br />
Element catalogElement = document.addElement("catalog");
//鍦?catalog 鍏冪礌涓嬌鐢?addComment() 鏂規硶娣誨姞娉ㄩ噴“An XML catalog”銆?br />
catalogElement.addComment("An XML Catalog");
//鍦?catalog 鍏冪礌涓嬌鐢?addProcessingInstruction() 鏂規硶澧炲姞涓涓鐞嗘寚浠ゃ?br />
catalogElement.addProcessingInstruction("target","text");
//鍦?catalog 鍏冪礌涓嬌鐢?addElement() 鏂規硶澧炲姞 journal 鍏冪礌銆?br />
Element journal=catalogElement.addElement("journal");
//浣跨敤 addAttribute() 鏂規硶鍚?journal 鍏冪礌娣誨姞 title 鍜?publisher 灞炴с?br />
journal.addAttribute("title", "XML Zone");
journal.addAttribute("publisher", "IBM Devoloperment");
//娣誨姞鑺傜偣journal鐨勫瓙鑺傜偣article,騫惰緗叾灞炴э紱
Element articleElement=journal.addElement("article");
articleElement.addAttribute("level", "Intermediate");
articleElement.addAttribute("date", "December-2008");
//娣誨姞鑺傜偣articleElement鐨勫瓙緇撶偣title,騫朵嬌鐢?setText() 鏂規硶璁劇疆鍏跺厓绱犵殑鏂囨湰銆?br />
Element titleElement=articleElement.addElement("title");
titleElement.setText("鍙堟槸涓嬮洦澶?);
//娣誨姞鑺傜偣articleElement鐨勫瓙緇撶偣author.娣誨姞瀛愮粨鐐圭殑瀛愮粨鐐筬irstname銆乴astname,騫惰緗叾鏂囦歡錛?br />
Element authorElement=articleElement.addElement("author");
Element firstNameElement=authorElement.addElement("firstname");
firstNameElement.setText("Marcello");
Element lastNameElement=authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
//鍙互浣跨敤 addDocType() 鏂規硶娣誨姞鏂囨。綾誨瀷璇存槑銆?br />
XMLWriter output;
try {
OutputFormat format=new OutputFormat();
format.setEncoding("gb2312");
output = new XMLWriter(
new FileWriter(new File("catalog.xml")),format);
output.write(document);
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 淇敼xml鏂囦歡鎸囧畾鑺傜偣鐨勫睘鎬э紱
* @param inputXml xml鏂囦歡嫻?br />
* @oldAttributeValue 鍘熷睘鎬э紱
* @attributeValue 瑕佷慨鏀規垚鐨勫鹼紱
* @param XPath 瑕佷慨鏀硅妭鐐瑰睘鎬х殑琛ㄨ揪寮忥紱濡傦細"http://article/@level" 鍒欒〃紺轟慨鏀硅妭鐐筶evel(鐖惰妭鐐逛負article)鐨勫睘鎬?br />
* 鐗瑰埆璇存槑:@鍚庨潰琛ㄧず鐨勬槸灞炴?
*/
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String oldAttributeValue,String attributeValue) {
if(XPath.indexOf("@")<0){
System.out.println("鍙傛暟XPath鏃犳晥,璇峰湪瑕佷慨鏀圭殑灞炴у墠鍔犲叆'@'");
return null;
}
SAXReader saxReader = new SAXReader();
Document document=null;
try {
document = saxReader.read(inputXml);
List list = document.selectNodes(XPath);
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals(oldAttributeValue))//鎶婂師灞炴т慨鏀逛負鏂扮殑灞炴э紱
attribute.setValue(attributeValue);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/**
* 淇敼鎸囧畾鑺傜偣鐨勫睘鎬у鹼紱
* @param inputXml xml鏂囦歡嫻?br />
* @param XPath 瑕佷慨鏀硅妭鐐瑰睘鎬х殑琛ㄨ揪寮忥紱濡傦細"http://article/@level" 鍒欒〃紺轟慨鏀硅妭鐐筶evel(鐖惰妭鐐逛負article)鐨勫睘鎬?br />
* @param attributeValue 灞炴ф柊鍊鹼紱
*/
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String attributeValue) {
if(XPath.indexOf("@")<0){
System.out.println("鍙傛暟XPath鏃犳晥,璇峰湪瑕佷慨鏀圭殑灞炴у墠鍔犲叆'@'");
return null;
}
SAXReader saxReader = new SAXReader();
Document document=null;
try {
document = saxReader.read(inputXml);
List list = document.selectNodes(XPath);
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
//鎶婂師灞炴т慨鏀逛負鏂扮殑灞炴э紱
attribute.setValue(attributeValue);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/**
* 鑾峰彇鏌愪竴鑺傜偣鐨勫睘鎬у鹼紱
* @param inputxml xml鏂囦歡錛?br />
* @param XPath
* @return
*/
public String[] getNodeAttributeValue(File inputxml,String XPath){
String nodeAttri="";//鍌ㄥ瓨鑺傜偣灞炴у?
if(XPath.indexOf("@")<0){
return null;
}
SAXReader saxReader=new SAXReader();
Document document=null;
try{
document=saxReader.read(inputxml);
List list=document.selectNodes(XPath);
Iterator it=list.iterator();
while(it.hasNext()){
Attribute attri=(Attribute)it.next();
nodeAttri+=attri.getValue()+",";
}
}catch(Exception e){
e.printStackTrace();
}
if(nodeAttri.length()>0){
nodeAttri=nodeAttri.substring(0, nodeAttri.length()-1);
}
return nodeAttri.split(",");
}
/**
* 淇敼鎸囧畾鑺傜偣鐨勬枃鏈鹼紱
* @param inputXml
* @param XPath 瑕佷慨鏀硅妭鐐瑰睘鎬х殑琛ㄨ揪寮忥紱濡傦細"http://article/@level" 鍒欒〃紺篴rticle鑺傜偣涓嬬殑鎵鏈塴evel鑺傜偣鐨勬枃鏈紱
* @param newText 鏂扮殑鏂囨湰鍊鹼紱
*/
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String newText){
if(XPath.indexOf("@")>=0){
System.out.println("鍙傛暟XPath鏃犳晥!");
return null;
}
SAXReader saxReader = new SAXReader();
Document document=null;
try {
document=saxReader.read(inputXml);
List list= document.selectNodes(XPath);
Iterator iter = list.iterator();
while(iter.hasNext()){
Element elementText=(Element)iter.next();
elementText.setText(newText);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/**
* 鏇挎崲鎸囧畾鑺傜偣鏂囨湰鐨勫箋?br />
* @param inputXml xml鏂囦歡嫻?br />
* @param XPath 瑕佷慨鏀硅妭鐐瑰睘鎬х殑琛ㄨ揪寮忥紱濡傦細"http://article/level" 鍒欒〃紺篴rticle鑺傜偣涓嬬殑鎵鏈塴evel鑺傜偣鐨勬枃鏈紱
* @param oldText 鍘熸枃鏈?br />
* @param newText 鏂版枃鏈紱
*/
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String oldText,String newText){
if(XPath.indexOf("@")>=0){
System.out.println("鍙傛暟XPath鏃犳晥!");
return null;
}
SAXReader saxReader = new SAXReader();
Document document=null;
try {
document=saxReader.read(inputXml);
List list= document.selectNodes(XPath);
Iterator iter = list.iterator();
while(iter.hasNext()){
Element elementText=(Element)iter.next();
if(elementText.getText().equals(oldText))
elementText.setText(newText);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/**
* 鑾峰彇鏌愪竴鑺傜偣鐨勬枃鏈唴瀹癸紱
* @param inputxml xml鏂囦歡錛?br />
* @param XPath
* @return
*/
public String[] getNodeTextValue(File inputxml,String XPath){
String nodeTextValue="";//鍌ㄥ瓨鑺傜偣灞炴у?
if(XPath.indexOf("@")>=0){
return null;
}
SAXReader saxReader=new SAXReader();
Document document=null;
try{
document=saxReader.read(inputxml);
List list=document.selectNodes(XPath);
Iterator it=list.iterator();
while(it.hasNext()){
Element text=(Element)it.next();
nodeTextValue+=text.getText()+",";
}
}catch(Exception e){
e.printStackTrace();
}
if(nodeTextValue.length()>0){
nodeTextValue=nodeTextValue.substring(0, nodeTextValue.length()-1);
}
return nodeTextValue.split(",");
}
/**
* 淇濆瓨xml鏂囦歡;
* @param document xml鏂囦歡嫻?
* @param filePath 鏂囦歡瀛樺偍鐨勫叏璺緞(鍖呮嫭鏂囦歡鍚?
* @code 鍌ㄥ瓨鐨勭紪鐮?
*/
public void saveXmlFile(Document document,String filePath,String code){
if(document==null){
return ;
}
XMLWriter output;
try {
OutputFormat format=new OutputFormat();
format.setEncoding(code);
output = new XMLWriter(new FileWriter(new File(filePath)),format);
output.write( document );
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 嫻嬭瘯錛?br />
public static void main(String[] args){
XmlDom4J dom4jParser=new XmlDom4J();
//鐢熸垚XML
//dom4jParser.createXMLFile();
File file=new File("D:/MyWork/operateXMLfile/catalog.xml");
//dom4jParser.saveXmlFile(document, "F://test.xml", "GBK");
/*String[] attrArray=dom4jParser.getNodeAttributeValue(file, "http://article/@level");
if(attrArray!=null){
for(int i=0;i<attrArray.length;i++){
System.out.println("Attribute is :"+attrArray[i]);
}
}*/
String[] nodeText=dom4jParser.getNodeTextValue(file, "http://article/title");
if(nodeText!=null){
for(int i=0;i<nodeText.length;i++){
System.out.println("NODE TEXT IS:"+nodeText[i]);
}
}
}
}
xml鏂囦歡瀹氫箟濡備笅錛?
<?xml version="1.0" encoding="gb2312"?>
<catalog><!--An XML Catalog--><?target text?>
<journal title="XML Zone" publisher="IBM Devoloperment">
<article level="灝忓鍥涘勾綰? date="December-2008"><title>鍙堟槸涓嬮洦澶?lt;/title>
<author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article>
<article level="澶у鍥涘勾綰? date="2008-04-01"><title>澶槼鍑烘潵浜?lt;/title>
<author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article>
</journal></catalog>
涓嬮潰浠嬬粛鍑犱釜Display鏈甯哥敤鐨勫姛鑳斤紝鏇村鍔熻兘璇峰弬鑰?a >http://displaytag.homeip.net/displaytag-examples-1.1/銆?br />
1. 鍒嗛〉
濡傛灉鎯沖浠g爜鍒嗛〉錛屽彧闇鍦╠isplay:table鏍囩涓坊鍔犱竴欏筽agesize="姣忛〉鏄劇ず琛屾暟"錛屽
<display:table name="test" pagesize="10"/>
2. 瀵瑰垪鎺掑簭
display tag鍙鍒楄繘琛屾帓搴忥紝灝辨槸鐐瑰嚮鍒楀悕錛屽璇ュ垪鐨勬暟鎹繘琛屾帓搴忋備綘鍙渶瀵規兂瑕佹帓搴忕殑鍒楁坊鍔?sort="true" 灝監K錛屽涓嬮潰鐨勪唬鐮佸彲瀵瑰墠涓夊垪榪涜鎺掑簭銆傚湪display:table涓坊鍔燿efaultsort="鍒楁暟"錛屽彲榛樿瀵規寚瀹氱殑鍒楁帓搴忋?br />
<display:table name="test" styleClass="list" cellspacing="0" cellpadding="0" defaultsort="1">
<display:column property="id" title="ID" class="idcol" sort="true"/>
<display:column property="name" url="detail.jsp" paramId="id" paramProperty="id" sort="true"/>
<display:column property="email" autolink="true" sort="true"/>
<display:column property="description" title="Comments"/>
</display:table>
濡傛灉table鏈夊垎欏碉紝Display Tag榛樿鍙褰撳墠欏佃繘琛屾帓搴忥紝濡傛灉鎯沖鏁翠釜list鎺掑簭錛屽彲浠ュ湪display:table涔嬮棿娣誨姞涓孌典唬鐮侊細
<display:setProperty name="sort.amount" value="list"/>
3. 瀵煎嚭鏁版嵁
鍦╠isplay:table涓坊鍔爀xport="true"錛岀湅鐪嬩細鍑虹幇浠涔堬紒Display Tag榛樿浼氭彁渚涗笁縐嶆暟鎹鍑烘柟寮忥細CSV銆丒xcel銆乆ML 銆?br />
鍙﹀Display Tag榪樺彲浠ュ鍑轟負PDF鏍煎紡錛屽湪http://prdownloads.sourceforge.net/itext/涓嬭澆涓涓緟鍔╁寘iText.jar錛宑opy鍒發ib鐩綍涓嬶紝鐒跺悗鍦╠isplay:table涔嬮棿娣誨姞涓孌典唬鐮侊細
<display:setProperty name="export.pdf" value="true"/>錛屽ぇ鍔熷憡鎴愩?/p>
4. Display Tag鐨勫睘鎬ц緗?br />
鍓嶉潰鎵璇寸殑display:setProperty 鏄竴縐嶆敼鍙楧isplay Tag灞炴х殑鏂規硶錛屼絾鏄湪姣忎釜jsp涓兘瑕佸啓澶夯鐑︿簡銆?br />
Display Tag涓緗簡寰堝榛樿鐨勫睘鎬э紝瀹冩湁涓涓笓闂ㄧ殑灞炴ф枃浠訛紝鏄湪瀹冪殑jar鍖呬腑鐨刣isplaytag/properties/TableTag.properties
鎯寵鏀瑰彉瀹冪殑榛樿灞炴э紝鎴戜滑鍙互鍦╓EB-INF\classes涓嬫柊寤轟竴涓枃浠禿isplaytag.properties錛屼豢鐓ableTag.properties涓睘鎬х殑鏍煎紡璁劇疆闇瑕佷慨鏀圭殑灞炴с?br />
TableTag.properties涓殑# messages涓緗殑鏄樉紺哄湪欏甸潰涓婄殑鎻愮ず淇℃伅銆傞粯璁ゆ槸鑻辨枃鐨勶紝鎴戜滑鍙互鎶婂畠鏀逛負涓枃鐨勩備笉榪囪繖閲屽彧鑳戒嬌鐢╱nicode錛屽氨鏄涓枃瀛楃蹇呴』杞崲涓簎nicode鐮侊紝榪欎釜鍙互浣跨敤jdk鑷甫鐨刵ative2ascii.exe榪涜杞崲銆?/p>
5. 鍏跺畠鍔熻兘
DisplayTag榪樻湁涓浜涘緢瀹炵敤鐨勫皬鍔熻兘錛岃繖閲屾彁涓や釜銆備竴涓槸瀵規暟鎹殑Format錛岃繖鏄?.1鐗堟湰娣誨姞鐨勬柊鍔熻兘錛屽彲浠ヤ嬌鐢ㄦ爣絳劇殑鏂瑰紡鏍煎紡鍖栨椂闂淬佹暟瀛椼佸瓧絎︿覆銆傛瘮濡傛棩鏈燂紝鍦ㄩ渶瑕佹牸寮忓寲鐨刢olumn鏍囩涓坊鍔爁ormat="{0,date,yyyy-MM-dd}"錛岀涓涓弬鏁頒負鏍煎紡鍖栫殑鏁版嵁搴忓彿錛岀浜屼釜鍙傛暟鏄暟鎹被鍨嬶紝鏁板瓧涓簄umber錛岀涓変釜鍙傛暟涓烘暟鎹牸寮忋?br />
鍙﹀涓涓姛鑳芥槸瀵箃able鏁版嵁鐨勫悎璁″姛鑳姐傚湪table鏍囩涓坊鍔?decorator="org.displaytag.decorator.TotalTableDecorator"錛岀劧鍚庡湪鎯寵榪涜鍚堣鐨勬暟鎹垪鐨刢olumn鏍囩涓坊鍔?total="true"錛岃鍒楀氨鍙互琚綆楁繪暟浜嗐備絾榪欎釜鍔熻兘鏈変釜緙虹偣錛屼笉鑳界敤鍦ㄦ湁鍒嗛〉鐨勬椂鍊欙紝瀹冨彧鑳藉悎璁$涓欏電殑鏁版嵁銆?br />
DisplayTag鐨勪笉瓚?br />
鍒濇浣跨敤DisplayTag鐨勪漢鍙兘浼氳寰楁儕鍠滐紝浣嗘槸鐢ㄤ箙浜嗕細鍙戠幇寰堝闂錛屾渶澶х殑闂鏄涓枃鐨勬敮鎸佷笉濂斤紝姣斿濡傛灉鏌ヨ鏉′歡涓湁涓枃錛屽氨鏃犳硶緲婚〉錛屾棤娉曞涓枃鎺掑簭錛屽皢涓枃瀵煎嚭涓烘寚瀹氭枃浠舵椂鍑虹幇涔辯爜絳夌瓑銆傝繖浜涢棶棰樻湁鏃跺欎細璁╀漢寰堥儊闂鳳紝鏈夋椂鍊欓煎緱浣犺鍘諱慨鏀瑰畠鐨勬簮浠g爜銆備笅闈㈡槸瀵逛互涓婂嚑涓棶棰樼殑瑙e喅鏂規硶錛?br />
1. 瀵逛簬涓枃鏃犳硶緲婚〉銆佹帓搴忥紝鏈綆鍗曠殑鍔炴硶鏄慨鏀筎omcat涓嬬殑server.xml鏂囦歡銆傛壘鍒癏TTP鐨凜onnector鏍囩錛屽湪閲岄潰娣誨姞涓欏筓RIEncoding="..."錛屽紩鍙烽噷闈㈢殑鍐呭鍙栧喅浜庝綘鐨勯〉闈㈢紪鐮侊紝姣斿鍙互鏄疓BK錛孶TF8絳夈傝繖鏍蜂笂闈袱涓棶棰樺氨鍙互瑙e喅浜嗐?br />
2. 瀵煎嚭涓烘枃浠訛細鍏跺疄榪欎釜鍔熻兘闄や簡涓枃鏀寔澶栬繕鏈夊緢澶氬叾瀹冮棶棰橈紝姣斿瀹冧細灝咹tml鏍囩涓璧峰鍑恒佸彧瀵煎嚭鏄劇ず鐨勫唴瀹癸紝浣嗗鏋滃table榪涜浜哾ecorator錛宒ecorator鍚庣殑鍐呭鏃犳硶瀵煎嚭銆傚鏋滄兂瑕佸皢涓枃姝g‘瀵煎嚭錛岄渶瑕佷慨鏀笵isplayTag婧愪唬鐮併?br />
涓嬭澆鐩稿悓鐗堟湰鐨勬簮浠g爜錛屽湪org.displaytag.export.ExcelView.java鏂囦歡涓壘鍒癵etMimeType()鏂規硶錛屽皢姝ゆ柟娉曚慨鏀逛負 return "application/vnd.ms-excel;charset=GB2312";錛屼慨鏀瑰悗瀵煎嚭鏁版嵁鐨勯熷害浼氭參寰堝錛屼笉榪囧皢灝卞惂銆?br />
3. 鏂扮増鐨凞isplayTag1.1娣誨姞浜嗗涓嬈″彇閮ㄥ垎鏁版嵁鐨勬敮鎸侊紝鐩稿叧鐨勬爣絳懼寘鎷琾artialList鍜宻ize錛岄渶瑕佽緗畃artialList="true"鍜宻ize鐨勫ぇ灝忋傚叿浣撴庝箞鐢ㄥ伓榪樻病鐮旂┒銆?br />
涔辯爜瑙e喅錛?/strong>
tomcat/jboss 淇敼server.xml
<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" /> |
<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /> |
鍦ㄥ叾涓坊鍔?strong style="color: black; background-color: #a0ffff">URIEncoding="GBK" 錛屾垨鑰呮槸鍏朵粬鐨勭紪鐮佹柟寮忥紝鍙樻垚濡備笅錛?/font>
<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" /> |
3銆佸仠姝omcat鏈嶅姟錛岄噸鏂板惎鍔═omcat鏈嶅姟鍗沖彲銆?/font>
銆愬彟闄?strong style="color: black; background-color: #ffff66">Weblogic瀹瑰櫒澶勭悊緙栫爜鐨勬柟寮忋?/font>
澶勭悊Weblogic瀹瑰櫒鐨勭紪鐮佹瘮杈冪畝鍗曪紝鍙渶瑕佸湪绔欑偣鐨剋eb.xml涓厤緗竴琛屽涓嬬殑浠g爜鍗沖彲銆?/font>
<context-param> <param-name>weblogic.httpd.inputCharset./*</param-name> <param-value>GBK</param-value> </context-param> |
銆愬彟闄凾omcat澶勭悊POST鎻愪氦涔辯爜鐨勬柟寮忋?/font>
<filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class> cn.cublog.jedliu.SetCharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> |
<filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> |
2銆佸湪cn.cublog.jedliu鍖呬腑SetCharacterEncodingFilter鏄敤浜庢潵瀹炵幇緙栫爜鐨勮繃婊ゅ櫒銆?/font>
|