锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鐩墠鏀寔鐨勭被鍨嬫湁錛?
鎬諱綋鎻愪緵涓ょ被鍔熻兘錛?
1. 灝嗗瓧絎︿覆杞崲涓烘寚瀹氱被鍨嬶紱
2. 娉ㄥ唽銆佹敞閿鍜屾煡璇㈢被鍨嬭漿鎹㈠櫒錛?/font> 灝嗕換鎰忕殑瀹炰緥杞彉涓?font face='"Times' New Roman">String錛岀敤娉曢潪甯哥畝鍗曘傚湪灝濊瘯鐨勮繃紼嬩腑錛屾劅瑙変笌璋冪敤瀹炰緥涓婄殑toString()鏂規硶鐨勬晥鏋滀竴鏍鳳紝涓嶇煡閬撴槸涓嶆槸鍦ㄨ繖涓柟娉曞唴浠呬粎鏄皟鐢ㄤ簡浼犲叆瀹炰緥鐨?font face='"Times' New Roman">toString()鏂規硶銆?/font> ps:闇瑕佽婧愪唬鐮佹墠鑳芥竻妤氥?/font> 灝嗗瓧絎︿覆value杞崲涓?font face='"Times' New Roman">clazz鐨勪竴涓疄渚嬶紱濡傛灉澶辮觸鐨勮瘽錛屽氨浠?font face='"Times' New Roman">String鐨勫艦寮忚繑鍥?font face='"Times' New Roman">value銆?
榪欎釜鏂規硶鏄鍓嶄竴鏂規硶鐨勫姞寮虹増錛屽皢鏁扮粍涓殑姣忎釜value閮借繘琛岃漿鎹紝鏈鍚庝互Object榪斿洖銆傦紙鏁扮粍涔熸槸Object鍟婏級
娉ㄩ攢杞崲鍣紝鍓嶈呭皢鎵鏈夌殑杞崲鍣ㄦ敞閿鎺夛紝鍚庤呭彧娉ㄩ攢瀵瑰簲浜?font face='"Times' New Roman">clazz鐨勮漿鎹㈠櫒銆傛敞閿鍦ㄨ繖閲屼笉鏄交搴曞垹闄や簡錛岃屾槸灝嗚漿鎹㈠櫒鍙樹負榛樿鐨勮漿鎹㈠櫒錛?font face='"Times' New Roman">apache commons鎻愪緵鐨勶級銆?/font> 鑾峰彇鎸囧畾綾誨瀷clazz鐨勮漿鎹㈠櫒. 涓烘寚瀹氱被鍨?font face='"Times' New Roman">clazz娉ㄥ唽杞崲鍣?font face='"Times' New Roman">converter銆傚鏋?font face='"Times' New Roman">clazz宸茬粡瀛樺湪涓涓搴旂殑杞崲鍣紝閭d箞converter錛屽皢瑕嗙洊鍘熸潵鐨勮漿鎹㈠櫒銆備篃灝辨槸璇達紝鎴戜滑鍙互涓?font face='"Times' New Roman">String,Double鍒涘緩鑷畾涔夌殑綾誨瀷杞崲鍣紝騫跺湪娉ㄥ唽鍚庤繘琛屼嬌鐢ㄣ?/font> ps:apache鐨勭被瀹氫箟鏄庣‘錛屾弿榪伴潪甯告竻妤氾紝鎵浠ュ氨涓嶈創鍑轟緥瀛愪簡銆傚綋鐒惰繖鍙槸鍒拌揪鍙互姝e父浣跨敤鐨勯樁孌碉紝濡傛灉瑕佽繘琛屾敼閫犳垨鑰呭垱寤鴻嚜宸辯殑ConvertUtils錛岄偅鍙兘闇瑕佹洿澶氱殑鏃墮棿錛屽洜涓鴻繕瑕佸幓鍙傝?font face='"Times' New Roman">ConvertUtilsBean錛岃繖閲屽氨涓嶈榪頒簡銆?br />
[鎽樿]:鏍¢獙妗嗘灦閰嶇疆銆佸鎴風鏍¢獙
[鍏抽敭瀛梋:嫻洣瑙嗛錛孲truts2搴旂敤寮鍙戠郴鍒楋紝WebWork錛孉pache錛寁alidation
[鐜]:struts-2.1.6銆丣DK6銆丮yEclipse7銆乀omcat6
[浣滆匽:Winty (wintys@gmail.com) http://www.tkk7.com/wintys
[姝f枃]:
Struts鏍¢獙妗嗘灦鎻愪緵浜嗕竴縐嶄笉鐢ㄧ紪鍐欎唬鐮侊紝鍙渶淇敼閰嶇疆鏂囦歡鍗沖彲瀵硅緭鍏ヨ繘琛屾牎楠岀殑鍔熻兘銆備唬鐮佹柟寮忔牎楠岋紝鍗抽噸鍐檝alidate()鏂規硶銆傚疄闄呭簲鐢ㄤ腑錛?strong>validate()涓庢牎楠屾鏋朵竴鑸彧閫夊叾涓銆?br />
1銆佹牎楠屾鏋墮厤緗?br />
鍦≧egisterAction.java鐩稿悓鐩綍鏂板緩鏍¢獙妗嗘灦閰嶇疆鏂囦歡RegisterAction-validation.xml銆俁egisterAction-validation.xml鐨凞TD鍙互澶嶅埗struts鑷甫鐨勭ず渚媠truts2-mailreader-2.1.6涓殑DTD:
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
xwork-validator-1.0.2.dtd:
<!--
XWork Validators DTD.
Used the following DOCTYPE.
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!ELEMENT validators (field|validator)+>
<!ELEMENT field (field-validator+)>
<!ATTLIST field
name CDATA #REQUIRED
>
<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT validator (param*, message)>
<!ATTLIST validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param
name CDATA #REQUIRED
>
<!ELEMENT message (#PCDATA)>
<!ATTLIST message
key CDATA #IMPLIED
>
RegisterAction-validation.xml:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!--
涓巉ield絳変環鐨剉alidator
<validator type="requiredstring">
<param name="fieldName">name</param>
<param name="trim">true</param>
<message>name required</message>
</validator>
<validator type="stringlength">
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>
-->
<field name="name">
<field-validator type="requiredstring" >
<param name="trim">true</param>
<message>name required</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</field-validator>
</field>
<field name="age">
<field-validator type="conversion" short-circuit="true">
<message>the field age conversion error</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age range: ${min} ~ ${max}</message>
</field-validator>
</field>
<field name="birthday">
<field-validator type="required">
<message>birthday required</message>
</field-validator>
<field-validator type="date">
<param name="min">2009-01-01</param>
<param name="max">2009-12-31</param>
<message>birthday range: ${min} ~ ${max}</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>invalid email address</message>
</field-validator>
</field>
</validators>
璇存槑:
a.鏍¢獙妗嗘灦鏈変袱縐嶆牎楠屾柟寮?field鍜寁alidator銆?br />
field鏍¢獙:鍏堟寚瀹氶渶瑕佹牎楠岀殑灞炴э紝鍐嶆寚瀹氭牎楠屾柟寮忋倂alidator鏍¢獙:鍏堟寚瀹氭牎楠屾柟寮忥紝鍐嶆寚瀹氶渶瑕佹牎楠岀殑灞炴с備袱縐嶆柟寮忔槸絳変環鐨勩?br />
field鏍¢獙:
<field name="name">
<field-validator type="requiredstring" >
<param name="trim">true</param>
<message>name required</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</field-validator>
</field>
validator鏍¢獙:
<validator type="requiredstring">
<param name="fieldName">name</param>
<param name="trim">true</param>
<message>name required</message>
</validator>
<validator type="stringlength">
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>
b.<field-validator type="requiredstring" >涓殑type鍙婂叾瀵瑰簲鐨剎work綾誨彲浠ュ湪xwork-2.1.2.jar/com.opensymphony.xwork2.validator.validators/default.xml涓煡鎵懼埌銆?br />
default.xml:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
c. 瀵逛簬鏍¢獙<field-validator type="requiredstring" >:String鐢╮equiredstring錛屽叾瀹冪被鍨嬬敤required銆?br />
d. 楠岃瘉閿欒灝嗛粯璁や駭鐢烣ieldError銆?br />
e. short-circuit="true" : 涓涓牎楠屽け璐ワ紝鏄惁鏄戶緇墽琛屽悗緇牎楠屻?br />
f. 瀵逛簬鐩稿悓灞炴х殑FieldError錛寁alidate()鏂規硶涓殑楠岃瘉鍜孯egisterAction-validation.xml涓殑楠岃瘉閮戒細鎵ц,騫朵笖FieldError閮戒細鏄劇ず銆?br />
鎵ц欏哄簭: RegisterAction-validation.xml => validate()銆?br />
2銆佺壒瀹氫簬涓氬姟閫昏緫鐨勫眬閮ㄦ牎楠?
瀵逛簬struts.xml涓?lt;action>鐨刴ethod="register"鎸囧畾鐨勪笟鍔℃柟娉時egister()錛屼嬌鐢ㄦ牎楠孯egisterAction-register-validation.xml(涓嶳egisterAction.java鍦ㄥ悓涓鐩綍涓?銆傚悓鏃訛紝RegisterAction-validation.xml浼氳鎵ц銆傛墽琛岄『搴? RegisterAction-validation.xml => RegisterAction-register-validation.xml
3銆丼truts2瀹㈡埛绔牎楠?br />
璁劇疆struts鏍囩<s:form>涓璿alidate="true"銆傝繖鏍峰氨浼氭牴鎹甊egisterAction-validation.xml鐢熸垚欏甸潰Javascript錛屽湪瀹㈡埛绔墽琛屾牎楠屻?br />
娉ㄦ剰:
a.struts鏍囩涓嶈兘浣跨敤simple涓婚銆?br />
b.Struts2瀹㈡埛绔牎楠屽姛鑳借緝寮憋紝涓鑸笉鐢ㄣ?br />
4銆丗ieldError鍜孉ctionError鐨勫疄鐜?br />
a.鐪熸瀛樻斁field綰у埆閿欒淇℃伅鐨勫璞℃槸LinkedHashMap銆?br />
b.璇inkedHashMap鐨刱ey鏄疭tring綾誨瀷鐨勶紝value鏄疉rrayList綾誨瀷錛屾墍浠ュ悓涓涓猭ey鍙互瀵瑰簲澶氫釜閿欒娑堟伅銆?br />
c.瀵逛簬Action綰у埆鐨勯敊璇俊鎭紝瀹為檯涓婃槸鏀劇疆鍦ˋrrayList涓殑銆?br />
[鍙傝冭祫鏂橾:
銆婃氮鏇﹁棰戜箣Struts2搴旂敤寮鍙戠郴鍒椼?br />
]]>
convert(java.lang.Object value)
convert(java.lang.String value, java.lang.Class clazz)
convert(java.lang.String[] values, java.lang.Class clazz)
deregister()鍜?a href_cetemp='http://www.itepub.net/html/kaifajingcui/Java/2006/0514/"file:///F:/software/apache/commons/commons-beanutils-1.7.0/docs/api/org/apache/commons/beanutils/ConvertUtils.html#deregister()"'>deregister(java.lang.Class clazz)
lookup(java.lang.Class clazz)
register(Converter converter, java.lang.Class clazz)
浠ヤ笅涓轟嬌鐢╟onvertUtils鐨勪竴涓狣ATE綾誨瀷鐨勪緥瀛愶紙璇ヤ緥瀛愭潵婧愪簬灝氬鍫傝灞忥級
1.瀹氫箟converter
package com.bjsxt.oa.web;
2
3import java.text.ParseException;
4import java.text.SimpleDateFormat;
5import java.util.Date;
6
7import org.apache.commons.beanutils.Converter;
8
9public class UtilDateConverter implements Converter {
10
11 private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
12
13 public Object convert(Class type, Object value) {
14 if (value == null) {
15 return value;
16 }
17 if (value instanceof Date) {
18 return value;
19 }
20 if (value instanceof String) {
21 try {
22 return format.parse((String)value);
23 } catch (ParseException e) {
24 e.printStackTrace();
25 }
26 }
27 return null;
28 }
29
30}
31
package com.bjsxt.oa.web;
2
3import java.util.Date;
4
5import javax.servlet.ServletException;
6import javax.servlet.http.HttpServlet;
7
8import org.apache.commons.beanutils.ConvertUtils;
9
10public class UtilDateConverterInitServlet extends HttpServlet {
11
12 @Override
13 public void init() throws ServletException {
14 ConvertUtils.register(new UtilDateConverter(), Date.class);
15 }
16
17}
18
<servlet>
2 <servlet-name>utilDateConverter</servlet-name>
3 <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
4 <load-on-startup>3</load-on-startup>
5 </servlet>
]]>
BeanUtils鎻愪緵瀵?Java鍙嶅皠鍜岃嚜鐪丄PI鐨勫寘瑁呫傚叾涓昏鐩殑鏄埄鐢ㄥ弽灝勬満鍒跺JavaBean鐨勫睘鎬ц繘琛屽鐞嗐傛垜浠煡閬擄紝涓涓狫avaBean閫氬父鍖呭惈浜嗗ぇ閲忕殑灞炴э紝寰?澶氭儏鍐典笅錛屽JavaBean鐨勫鐞嗗鑷村ぇ閲廹et/set浠g爜鍫嗙Н錛屽鍔犱簡浠g爜闀垮害鍜岄槄璇諱唬鐮佺殑闅懼害銆?br />
浜屻佺敤娉曪細
BeanUtils鏄繖涓寘閲屾瘮杈冨父鐢ㄧ殑涓涓伐鍏風被錛岃繖閲屽彧浠嬬粛瀹冪殑copyProperties()鏂規硶銆傝鏂規硶瀹氫箟濡備笅錛?br />
public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
throws java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetException
濡?鏋滀綘鏈変袱涓叿鏈夊緢澶氱浉鍚屽睘鎬х殑JavaBean錛屼竴涓緢甯歌鐨勬儏鍐靛氨鏄疭truts閲岀殑PO瀵硅薄錛堟寔涔呭璞★級鍜屽搴旂殑ActionForm錛屼緥濡?Teacher鍜孴eacherForm銆傛垜浠竴鑸細鍦ˋction閲屼粠ActionForm鏋勯犱竴涓狿O瀵硅薄錛屼紶緇熺殑鏂瑰紡鏄嬌鐢ㄧ被浼間笅闈㈢殑璇彞瀵瑰睘鎬ч?涓祴鍊鹼細
//寰楀埌TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//鏋勯燭eacher瀵硅薄
Teacher teacher=new Teacher();
//璧嬪?br />
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());
//鎸佷箙鍖朤eacher瀵硅薄鍒版暟鎹簱
HibernateDAO=;
HibernateDAO.save(teacher);
鑰屼嬌鐢˙eanUtils鍚庯紝浠g爜灝卞ぇ澶ф敼瑙備簡錛屽涓嬫墍紺猴細
//寰楀埌TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//鏋勯燭eacher瀵硅薄
Teacher teacher=new Teacher();
//璧嬪?br />
BeanUtils.copyProperties(teacher,teacherForm);
//鎸佷箙鍖朤eacher瀵硅薄鍒版暟鎹簱
HibernateDAO=;
HibernateDAO.save(teacher);
濡?鏋淭eacher鍜孴eacherForm闂村瓨鍦ㄥ悕縐頒笉鐩稿悓鐨勫睘鎬э紝鍒橞eanUtils涓嶅榪欎簺灞炴ц繘琛屽鐞嗭紝闇瑕佺▼搴忓憳鎵嬪姩澶勭悊銆備緥濡?Teacher鍖呭惈modifyDate錛堣灞炴ц褰曟渶鍚庝慨鏀規棩鏈燂紝涓嶉渶瑕佺敤鎴峰湪鐣岄潰涓緭鍏ワ級灞炴ц孴eacherForm鏃犳灞炴э紝閭d箞鍦ㄤ笂闈唬鐮佺殑 copyProperties()鍚庤繕瑕佸姞涓婁竴鍙ワ細
teacher.setModifyDate(new Date());
鎬?涔堟牱錛屽緢鏂逛究鍚э紒闄eanUtils澶栬繕鏈変竴涓悕涓篜ropertyUtils鐨勫伐鍏風被錛屽畠涔熸彁渚沜opyProperties()鏂規硶錛屼綔鐢ㄤ笌 BeanUtils鐨勫悓鍚嶆柟娉曞崄鍒嗙浉浼鹼紝涓昏鐨勫尯鍒湪浜庡悗鑰呮彁渚涚被鍨嬭漿鎹㈠姛鑳斤紝鍗沖彂鐜頒袱涓狫avaBean鐨勫悓鍚嶅睘鎬т負涓嶅悓綾誨瀷鏃訛紝鍦ㄦ敮鎸佺殑鏁版嵁綾誨瀷鑼冨洿 鍐呰繘琛岃漿鎹紝鑰屽墠鑰呬笉鏀寔榪欎釜鍔熻兘錛屼絾鏄熷害浼氭洿蹇竴浜涖侭eanUtils鏀寔鐨勮漿鎹㈢被鍨嬪涓嬶細
* java.lang.BigDecimal
* java.lang.BigInteger
* boolean and java.lang.Boolean
* byte and java.lang.Byte
* char and java.lang.Character
* java.lang.Class
* double and java.lang.Double
* float and java.lang.Float
* int and java.lang.Integer
* long and java.lang.Long
* short and java.lang.Short
* java.lang.String
* java.sql.Date
* java.sql.Time
* java.sql.Timestamp
榪欓噷瑕佹敞鎰忎竴鐐癸紝java.util.Date鏄笉琚敮鎸佺殑錛岃屽畠鐨勫瓙綾籮ava.sql.Date鏄鏀寔鐨勩傚洜姝ゅ鏋滃璞″寘鍚椂闂寸被鍨嬬殑灞炴э紝涓斿笇鏈涜杞崲鐨勬椂鍊欙紝涓瀹氳浣跨敤java.sql.Date綾誨瀷銆傚惁鍒欏湪杞崲鏃朵細鎻愮ずargument mistype寮傚父銆?br />
涓夈佷紭緙虹偣錛?br />
Apache Jakarta Commons欏圭洰闈炲父鏈夌敤銆傛垜鏇懼湪璁稿涓嶅悓鐨勯」鐩笂鎴栫洿鎺ユ垨闂存帴鍦頒嬌鐢ㄥ悇縐嶆祦琛岀殑commons緇勪歡銆傚叾涓殑涓涓己澶х殑緇勪歡灝辨槸BeanUtils銆傛垜 灝嗚鏄庡浣曚嬌鐢˙eanUtils灝唋ocal瀹炰綋bean杞崲涓哄搴旂殑value 瀵硅薄錛?br />
BeanUtils.copyProperties(aValue, aLocal)
涓?闈㈢殑浠g爜浠巃Local瀵硅薄澶嶅埗灞炴у埌aValue瀵硅薄銆傚畠鐩稿綋綆鍗曪紒瀹冧笉綆ocal錛堟垨瀵瑰簲鐨剉alue錛夊璞℃湁澶氬皯涓睘鎬э紝鍙榪涜澶嶅埗銆傛垜浠亣璁?local瀵硅薄鏈?00涓睘鎬с備笂闈㈢殑浠g爜浣挎垜浠彲浠ユ棤闇閿叆鑷沖皯100琛岀殑鍐楅暱銆佸鏄撳嚭閿欏拰鍙嶅鐨刧et鍜宻et鏂規硶璋冪敤銆傝繖澶浜嗭紒澶己澶т簡錛佸お鏈夌敤 浜嗭紒
鐜板湪錛岃繕鏈変竴涓潖娑堟伅錛氫嬌鐢˙eanUtils鐨勬垚鏈儕浜哄湴鏄傝吹錛佹垜鍋氫簡涓涓畝鍗曠殑嫻嬭瘯錛孊eanUtils鎵鑺辮垂鐨勬椂闂磋瓚呰繃鍙栨暟 鎹佸皢鍏跺鍒跺埌瀵瑰簲鐨?value瀵硅薄錛堥氳繃鎵嬪姩璋冪敤get鍜宻et鏂規硶錛夛紝浠ュ強閫氳繃涓茶鍖栧皢鍏惰繑鍥炲埌榪滅▼鐨勫鎴鋒満鐨勬椂闂存誨拰銆傛墍浠ヨ灝忓績浣跨敤榪欑濞佸姏錛?
璇ユ枃绔犵殑鍘熸枃鍦板潃涓猴細http://lifejava.spaces.live.com/Blog/cns!A666C33543221640!158.entry
]]>
pg:pager銆愯繖涓爣絳劇敤鏉ヨ緗垎欏電殑鎬諱綋鍙傛暟銆戦噸瑕佸弬鏁拌鏄庯細
url:鍒嗛〉鐨勯摼鎺ユ牴鍦板潃錛宲ager鏍囩浼氬湪榪欎釜閾炬帴鐨勫熀紜涓婇檮鍔犲垎欏靛弬鏁?br />
items:鎬昏褰曟暟錛宲ager鏍囩姝f槸鏍規嵁榪欎釜鍊兼潵璁$畻鍒嗛〉鍙傛暟鐨?br />
maxPageItems:姣忛〉鏄劇ず鐨勮鏁幫紝榛樿涓?0
maxIndexPages:鍦ㄥ驚鐜緭鍑洪〉鐮佺殑鏃跺欙紝鏈澶ц緭鍑哄灝戜釜欏電爜錛岄粯璁ゆ槸10
pg:first銆愮涓欏電殑鏍囩銆戦噸瑕佸弬鏁拌鏄庯細
export鍙橀噺鐨勬剰涔夛細
pageUrl - 鍒嗛〉閾炬帴URL鍦板潃錛堟渶閲嶈鐨別xport鍙傛暟錛?br />
pageNumber - 欏電爜
firstItem - 棣栭〉絎竴琛岀殑绱㈠紩鍊?br />
lastItem - 棣栭〉鏈鍚庝竴琛岀殑绱㈠紩鍊?br />
pg:pre銆愪笂涓欏墊爣絳俱戦噸瑕佸弬鏁拌鏄庯細
export鍙橀噺鐨勬剰涔夛細
pageUrl - 鍒嗛〉閾炬帴URL鍦板潃錛堟渶閲嶈鐨別xport鍙傛暟錛?br />
pageNumber - 欏電爜
firstItem - 鍓嶉〉絎竴琛岀殑绱㈠紩鍊?br />
lastItem - 鍓嶉〉鏈鍚庝竴琛岀殑绱㈠紩鍊?br />
pg:next銆愪笅涓欏墊爣絳俱戦噸瑕佸弬鏁拌鏄庯細
export鍙橀噺鐨勬剰涔夛細
pageUrl - 鍒嗛〉閾炬帴URL鍦板潃錛堟渶閲嶈鐨別xport鍙傛暟錛?br />
pageNumber - 欏電爜
firstItem - 涓嬮〉絎竴琛岀殑绱㈠紩鍊?br />
lastItem - 涓嬮〉鏈鍚庝竴琛岀殑绱㈠紩鍊?br />
pg:last閲嶈鍙傛暟璇存槑錛?br />
export鍙橀噺鐨勬剰涔夛細
pageUrl - 鍒嗛〉閾炬帴URL鍦板潃錛堟渶閲嶈鐨別xport鍙傛暟錛?br />
pageNumber - 欏電爜
firstItem - 灝鵑〉絎竴琛岀殑绱㈠紩鍊?br />
lastItem - 灝鵑〉鏈鍚庝竴琛岀殑绱㈠紩鍊?br />
pg:pages銆愯繖涓爣絳劇敤鏉ュ驚鐜緭鍑洪〉鐮佷俊鎭戦噸瑕佸弬鏁拌鏄庯細
export鍙橀噺鐨勬剰涔夛細
pageUrl - 鍒嗛〉閾炬帴URL鍦板潃錛堟渶閲嶈鐨別xport鍙傛暟錛?br />
pageNumber - 欏電爜
firstItem - pageNumber榪欎釜欏電爜鎸囧畾鐨勯偅涓欏電殑絎竴琛岀殑绱㈠紩鍊?br />
lastItem - pageNumber榪欎釜欏電爜鎸囧畾鐨勯偅涓欏電殑鏈鍚庝竴琛岀殑绱㈠紩鍊?br />
pager-taglib-2.0涓嬭澆
http://www.tkk7.com/Files/wx886104/pager-taglib-2.0.rar
]]>
* 鍦╯truts-config.xml鏂囦歡涓姞鍏ワ細<message-resources parameter="MessageResources" />
2銆佹彁渚涗笉鍚岀増鏈殑鍥介檯鍖栬祫婧愭枃浠訛紝涓枃闇瑕侀噰鐢╪ative2ascii杞崲鎴恥nicode
3銆佸湪jsp涓噰鐢?lt;bean:message>鏍囩鏉ヨ鍙栧浗闄呭寲娑堟伅鏂囨湰
4銆佷簡瑙e埄鐢╯truts榛樿灝唋ocale鏀懼埌session涓殑鐗規э紝瀹屾垚閲囩敤緙栫▼鐨勬柟寮忓垏鎹㈣璦璁劇疆
* 鍙傝錛欳hangeLanguageAction.java
5銆佹秷鎭枃鏈殑鍥介檯鍖栧鐞嗭紝鍏辨湁涓変釜姝ラ錛?br />
* 鍒涘緩鍥介檯鍖栨秷鎭?br />
* 浼犻掑浗闄呭寲娑堟伅
* 鏄劇ず鍥介檯鍖栨秷鎭?br />
濡備綍鍒涘緩鍥介檯鍖栨秷鎭紵
鐞嗚ВActionMessage鍜孉ctionMessages涓や釜瀵硅薄鐨勫尯鍒?br />
濡備綍浼犻掑浗闄呭寲娑堟伅錛?br />
* 璋冪敤saveMessage()浼犻掓櫘閫氭秷鎭紝璋冪敤saveErrors浼犻掗敊璇秷鎭?br />
濡備綍鏄劇ず鍥介檯鍖栨秷鎭紵
閫氳繃<html:messages>鏍囩鏄劇ず娑堟伅錛堝彲浠ユ樉紺烘櫘閫氭秷鎭拰閿欒娑堟伅錛?br />
閫氳繃<html:errors>鏄劇ず娑堟伅錛堝彧鑳芥樉紺洪敊璇秷鎭級
褰撳皢鍥介檯鍖栬祫婧愭枃浠舵斁鍏ュ埌涓涓寘鏃訛紝鍦╯truts-config.xml鏂囦歡涓姞鍏ワ細<message-resources parameter="鍖呭悕.MessageResources" />
ChangeLanguageAction.java
鎵闇璧勬簮錛?
ReadCookieAction.java- 璇誨彇 Cookie 闆嗗悎錛屽鏋滄壘鍒板搴?Cookie 錛屽啓鍏?Session 錛?
Login.jsp- 鐧誨綍鐢ㄩ〉闈紱
LoginSubmit.java- 璁板綍鐧誨綍淇℃伅錛屽茍鍐欏叆 Session 錛?
LoginOk.jsp- 璇誨彇 Session 錛屽茍鏄劇ず銆?
璇?Cookie 鐨勬柟娉?錛?
Cookie[] cookies = request.getCookies();
if (cookies != null ) {
for ( int i=0; i<cookies. length ; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals( "userInfo" )) {
String value = cookie.getValue();
String[] info = value.split( "_" );
UserForm userForm = new UserForm();
userForm.setUserName(info[0]);
userForm.setUserPassword(info[1]);
request.getSession().setAttribute( "userForm" , userForm);
return mapping.findForward( "ok" );
}
}
}
鍐?Cookie 鐨勬柟娉曪細
Cookie c = new Cookie( "userInfo" ,userForm.getUserName()+ "_" +userForm.getUserPassword());
c.setComment( "A test cookie" );
c.setMaxAge(120);
response.addCookie(c);
棣栧厛寤虹珛涓涓狥ileAction
package com.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.actionForm.FileActionForm;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.text.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import java.net.URLEncoder;
import com.dao.*;
public class FileAction extends DispatchAction {
private JDBConnection connection =new JDBConnection();
//浠ヤ笅鏂規硶瀹炵幇鏂囦歡鐨勪笂浼?/span>
public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
ActionForward forward=null;
Date date = new Date();
FileActionForm fileActionForm = (FileActionForm) form;
//FormFile鐢ㄤ簬鎸囧畾瀛樺彇鏂囦歡鐨勭被鍨?br />
FormFile file = fileActionForm.getFile(); //鑾峰彇褰撳墠鐨勬枃浠?/span>
// 鑾峰緱緋葷粺鐨勭粷瀵硅礬寰?/span> String dir = servlet.getServletContext().getRealPath("/image");
//鎴戜笂浼犵殑鏂囦歡娌℃湁鏀懼湪鏈嶅姟鍣ㄤ笂銆傝屾槸瀛樺湪D:D:\\loadfile\\temp\\
String dir="D:\\loadfile\\temp\\";
int i = 0;
String type = file.getFileName();
while(i!=-1){
//鎵懼埌涓婁紶鏂囦歡鐨勭被鍨嬬殑浣嶇疆錛岃繖涓湴鏂圭殑鏄?.'
i = type.indexOf(".");
/* System.out.println(i);*/
/*鎴彇涓婁紶鏂囦歡鐨勫悗緙鍚?姝ゆ椂寰楀埌浜嗘枃浠剁殑綾誨瀷*/
type = type.substring(i+1);
}
// 闄愬埗涓婁紶綾誨瀷涓簀pg,txt,rar;
if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))
{//褰撲笂浼犵殑綾誨瀷涓嶄負涓婅堪綾誨瀷鏃訛紝璺寵漿鍒伴敊璇〉闈€?/span>
forward=mapping.findForward("error");
}
else
{
// 灝嗕笂浼犳椂闂村姞鍏ユ枃浠跺悕錛堣繖涓湴鏂圭殑鏄縐掓暟錛?nbsp;
String times = String.valueOf(date.getTime());
//緇勫悎鎴?time.type
String fname = times + "." + type;
//InInputStream鏄敤浠ヤ粠鐗瑰畾鐨勮祫婧愯鍙栧瓧鑺傜殑鏂規硶銆?br />
InputStream streamIn = file.getInputStream(); //鍒涘緩璇誨彇鐢ㄦ埛涓婁紶鏂囦歡鐨勫璞?br />
//寰楀埌鏄瓧鑺傛暟錛屽嵆byte,鎴戜滑鍙互鐩存帴鐢╢ile.getFileSize(),涔熷彲浠ュ湪鍒涘緩璇誨彇瀵硅薄鏃剁敤streamIn.available();
// int ok=streamIn.available();
int ok=file.getFileSize();
String strFee = null;
//榪欎釜鍦版柟鏄鐞嗕笂浼犵殑涓篗鍗曚綅璁$畻鏃訛紝涓嬩竴涓槸浠b,鍦ㄤ笅涓涓槸byte;
if(ok>=1024*1024)
{
float ok1=(((float)ok)/1024f/1024f);
DecimalFormat myformat1 = new DecimalFormat("0.00");
strFee = myformat1.format(ok1)+"M";
System.out.println(strFee+"M");
}
else if(ok>1024 && ok<=1024*1024)
{
double ok2=((double)ok)/1024;
DecimalFormat myformat2=new DecimalFormat("0.00");
strFee = myformat2.format(ok2)+"kb";
System.out.println(strFee+"kb");
}
else if(ok<1024)
{
System.out.println("aaaaaaaaa");
strFee=String.valueOf(ok)+"byte";
System.out.println(strFee);
}
System.out.println( streamIn.available()+"鏂囦歡澶у皬byte");
//榪欎釜鏄痠o鍖呬笅鐨勪笂浼犳枃浠剁被
File uploadFile = new File(dir); //鎸囧畾涓婁紶鏂囦歡鐨勪綅緗?br />
if (!uploadFile.exists() || uploadFile == null) { //鍒ゆ柇鎸囧畾璺緞dir鏄惁瀛樺湪錛屼笉瀛樺湪鍒欏垱寤鴻礬寰?br />
uploadFile.mkdirs();
}
//涓婁紶鐨勮礬寰?鏂囦歡鍚?br />
String path = uploadFile.getPath() + "\\" + fname;
//OutputStream鐢ㄤ簬鍚戞煇涓洰鏍囧啓鍏ュ瓧鑺傜殑鎶借薄綾伙紝榪欎釜鍦版柟鍐欏叆鐩爣鏄痯ath錛岄氳繃杈撳嚭嫻丗ileOutputStream鍘誨啓
OutputStream streamOut = new FileOutputStream(path);
int bytesRead = 0;
byte[] buffer = new byte[8192];
//灝嗘暟鎹鍏yte鏁扮粍鐨勪竴閮ㄥ垎錛屽叾涓鍏ュ瓧鑺傛暟鐨勬渶澶у兼槸8192錛岃鍏ョ殑瀛楄妭灝嗗瓨鍌ㄥ埌錛宐uffer[0]鍒癰uffer[0+8190-1]鐨勯儴鍒嗕腑
//streamIn.read鏂規硶榪斿洖鐨勬槸瀹為檯璇誨彇瀛楄妭鏁扮洰.濡傛灉璇誨埌鏈熬鍒欒繑鍥?1.濡傛灉bytesRead榪斿洖涓?鍒欒〃紺烘病鏈夎鍙栦換浣曞瓧鑺傘?br />
while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {
//鍐欏叆buffer鏁扮粍鐨勪竴閮ㄥ垎錛屼粠buf[0]寮濮嬪啓鍏ュ茍鍐欏叆bytesRead涓瓧鑺傦紝榪欎釜write鏂規硶灝嗗彂鐢熼樆濉炵洿鑷沖瓧鑺傚啓鍏ュ畬鎴愩?br />
streamOut.write(buffer, 0, bytesRead);
}
// 鍏抽棴杈撳嚭杈撳叆嫻?閿姣丗ile嫻併?br />
streamOut.close();
streamIn.close();
file.destroy();
String paths=path;
System.out.println(paths);
String fileName = Chinese.toChinese(fileActionForm.getFileName()); //鑾峰彇鏂囦歡鐨勫悕縐?/span>
//String fileSize = String.valueOf(file.getFileSize());
String fileDate = DateFormat.getDateInstance().format(date);
String sql = "insert into tb_file values('" + fileName + "','" +
strFee + "','" + fileDate + "','" + paths + "')";
connection.executeUpdate(sql);
connection.closeConnection();
forward=mapping.findForward("upLoadFileResult");
}
return forward;
}
//瀹炵幇鏂囦歡鐨勪笅杞?br />
public ActionForward downFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
String path = request.getParameter("path");
System.out.println(path+"111");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
//濡傛灉鏄粠鏈嶅姟鍣ㄤ笂鍙栧氨鐢ㄨ繖涓幏寰楃郴緇熺殑緇濆璺緞鏂規硶銆?nbsp; String filepath = servlet.getServletContext().getRealPath("/" + path);
String filepath=path;
System.out.println("鏂囦歡璺緞"+filepath);
File uploadFile = new File(filepath);
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
//榪欎釜灝卞氨鏄脊鍑轟笅杞藉璇濇鐨勫叧閿唬鐮?/span>
response.setHeader("Content-disposition",
"attachment;filename=" +
URLEncoder.encode(path, "utf-8"));
int bytesRead = 0;
//榪欎釜鍦版柟鐨勫悓涓婁紶鐨勪竴鏍楓傛垜灝變笉澶氳浜嗭紝閮芥槸鐢ㄨ緭鍏ユ祦榪涜鍏堣錛岀劧鍚庣敤杈撳嚭嫻佸幓鍐欙紝鍞竴涓嶅悓鐨勬槸鎴戠敤鐨勬槸緙撳啿杈撳叆杈撳嚭嫻?br />
byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
return null;
}
}
FileActionForm
package com.actionForm;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;
public class FileActionForm extends ActionForm {
private String fileName;//涓婁紶鏂囦歡鐨勫悕縐?br />
private String fileSize;//涓婁紶鏂囦歡鐨勫ぇ灝?br />
private String filePath;//涓婁紶鏂囦歡鍒版湇鍔″櫒鐨勮礬寰?br />
private String fileDate;//涓婁紶鏂囦歡鐨勬棩鏈?br />
private FormFile file;//涓婁紶鏂囦歡
public String getFileName() {
return fileName;
}
public FormFile getFile() {
return file;
}
public String getFileSize() {
return fileSize;
}
public String getFilePath() {
return filePath;
}
public String getFileDate() {
return fileDate;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(FormFile file) {
this.file = file;
}
public void setFileSize(String fileSize) {
this.fileSize = fileSize;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public void setFileDate(String fileDate) {
this.fileDate = fileDate;
}
}
index.jsp 姝や綅緗殑form鏄痡avabeen鐨勫璞★紝榪欎釜javabeen涓瓨鍙栫殑鍥劇墖鐨勭浉鍏充俊鎭?/span>
<table width="264" height="81" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="115" rowspan="4" align="center"><img src="<%=form.getFilePath()%>" width="100" height="100"></td>
<td width="133" align="center">鍥劇墖鍚嶇О錛?lt;%=form.getFileName()%></td>
</tr>
<tr align="center">
<td>鍥劇墖澶у皬錛?lt;%=form.getFileSize()%></td>
</tr>
<tr align="center">
<td>涓婁紶鏃ユ湡:<%=form.getFileDate()%></td>
</tr>
<tr>
<td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>
</td>
</tr>
</table>
<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">
<table height="52" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="60" height="26">鍥劇墖鍚嶇О:</td>
<td width="160"> <html:text property="fileName"/> </td>
<td width="60">鍥劇墖璺緞:</td>
<td width="198"> <html:file property="file"/> </td>
</tr>
<tr align="right">
<td height="26" colspan="4"> <html:submit>涓婁紶</html:submit> </td>
</tr>
</table>
</html:form>
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <struts-config>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "
<form-beans>
<form-bean name="fileActionForm" type="com.actionForm.FileActionForm" />
</form-beans>
<action-mappings>
<action name="fileActionForm" parameter="method" path="/fileAction" scope="request" type="com.action.FileAction" validate="true">
<forward name="upLoadFileResult" path="/result.jsp"/>
<forward name="error" path="/fail.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
杞嚜javaEye http://www.javaeye.com/topic/219585
]]>