<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-34  評(píng)論-1965  文章-0  trackbacks-0
    All Input Is Evil!
    -Writing secure code

    在寫(xiě)前幾篇文章的時(shí)候,有些朋友建議我的寫(xiě)一篇關(guān)于表單數(shù)據(jù)校驗(yàn)的文章。 正如文章的開(kāi)頭所引用的《Writing Secure Code》的名言:“所有的輸入都是罪惡的”,所以我們應(yīng)該對(duì)所有的外部輸入進(jìn)行校驗(yàn)。而表單是應(yīng)用程序最簡(jiǎn)單的入口,對(duì)其傳進(jìn)來(lái)的數(shù)據(jù),我們必須進(jìn)行校驗(yàn)。

    轉(zhuǎn)換與校驗(yàn)(Conversion & Validation)

    其實(shí)上篇文章,我本來(lái)是打算寫(xiě)表單數(shù)據(jù)校驗(yàn)的內(nèi)容,但是經(jīng)過(guò)再三思考后,還是決定先寫(xiě)Struts 2.0轉(zhuǎn)換器的內(nèi)容。原因是我認(rèn)為轉(zhuǎn)換是校驗(yàn)的基礎(chǔ),只有在數(shù)據(jù)被正確地轉(zhuǎn)換成其對(duì)應(yīng)的類(lèi)型后,我們才可以對(duì)其取值范圍進(jìn)行校驗(yàn)。看個(gè)例子相信大家可以更清楚。現(xiàn)在我們就來(lái)改造一下《轉(zhuǎn)換器(Converter)——Struts 2.0中的魔術(shù)師》的第一個(gè)例子。

    首先,從Action開(kāi)始,修改后的代碼如下:

    package tutorial;

    import java.util.Locale;

    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.util.LocalizedTextUtil;

    public class HelloWorld extends ActionSupport {
    ? ?
    private String msg;
    ? ?
    private Locale loc = Locale.US;
    ? ?
    ? ?
    public String getMsg() {
    ? ? ? ?
    return msg; ? ? ? ?
    ? ?}

    ? ?
    ? ?
    public Locale getLoc() {
    ? ? ? ?
    return loc;
    ? ?}

    ? ?
    ? ?
    public void setLoc(Locale loc) {
    ? ? ? ?
    this .loc = loc;
    ? ?}

    ? ?
    ? ?@Override
    ? ?
    public void validate() {
    ? ? ? ?System.out.println(
    " Calling validate() " );
    ? ? ? ?
    if ( ! (loc.equals(Locale.US) || loc.equals(Locale.CHINA))) {
    ? ? ? ? ? ? ? ? ? ?addFieldError(
    " loc " , getText( " validation.loc " ));
    ? ? ? ?}

    ? ?}

    ? ? ? ?
    ? ?
    public void validateExecute() {
    ? ? ? ?System.out.println(
    " Calling validateExecute() by reflection " );
    ? ?}

    ? ?
    ? ?@Override
    ? ?
    public String execute() {
    ? ? ? ?System.out.println(
    " Calling execute() " );
    ? ? ? ?
    // LocalizedTextUtil是Struts 2.0中國(guó)際化的工具類(lèi),<s:text>標(biāo)志就是通過(guò)調(diào)用它實(shí)現(xiàn)國(guó)際化的
    ?? ?? ? ? ?msg = LocalizedTextUtil.findDefaultText( " HelloWorld " , loc);
    ? ? ? ?
    return SUCCESS;
    ? ?}

    }

    然后,修改Struts.xml中Action的定義指明輸入地址:

    < action name ="HelloWorld" class ="tutorial.HelloWorld" >
    ? ?
    < result > /HelloWorld.jsp </ result >
    ? ?
    < result name ="input" > /HelloWorld.jsp </ result >
    </ action >

    接著,在HelloWorld.jsp中加入錯(cuò)誤提示:

    <% @ page ?contentType = " text/html; charset=UTF-8 " %>
    <% @taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    ? ?
    < title > Hello World </ title >
    </ head >
    < body >
    ? ?
    < div style ="color:red;" >
    ? ? ? ?
    < s:fielderror />
    ? ?
    </ div >
    ? ?
    < s:form action ="HelloWorld" theme ="simple" > ? ? ? ? ? ?
    ? ? ? ? Locale:
    < s:textfield name ="loc" /> &nbsp; < s:submit />
    ? ?
    </ s:form > ? ?
    ? ?
    < h2 >< s:property value ="msg" /></ h2 >
    </ body >
    </ html >

    再修改LocaleConverter.java文件,將內(nèi)容改為:

    package tutorial;

    import java.util.Locale;
    import java.util.Map;
    import java.util.regex.Pattern;

    public class LocaleConverter extends ognl.DefaultTypeConverter {
    ? ?@Override
    ? ?
    public Object convertValue(Map context, Object value, Class toType) {
    ? ? ? ?
    if (toType == Locale. class ) { ? ? ? ? ? ?
    ? ? ? ? ? ?System.out.println(
    " Converting String to Locale " );
    ? ? ? ? ? ?String locale
    = ((String[]) value)[ 0 ];
    ? ? ? ? ? ?
    return new Locale(locale.substring( 0 , 2 ), locale.substring( 3 ));
    ? ? ? ?}
    else if (toType == String. class ) {
    ? ? ? ? ? ?System.out.println(
    " Converting Locale to String " );
    ? ? ? ? ? ?Locale locale
    = (Locale) value;
    ? ? ? ? ? ?
    return locale.toString();
    ? ? ? ?}

    ? ? ? ?
    return null ;
    ? ?}

    }

    之后,修改國(guó)際化資源文件,內(nèi)容為:

    HelloWorld = 你好,世界!
    invalid.fieldvalue.loc
    = Locale必須為\ " xx_XX\ " 的格式
    validation.loc
    = 區(qū)域必須為中國(guó)或美國(guó)
    globalMessages_zh_CN.properties

    HelloWorld = Hello World!
    invalid.fieldvalue.loc
    = Locale must like \ " xx_XX\ "
    validation.loc
    = Locale must be China or USA
    globalMessages_en_US.properties

    發(fā)布運(yùn)行應(yīng)用程序,在瀏覽器中鍵入http://localhost:8080/Struts2_Validation/HelloWorld.action,在Locale中輸入zh_CN,按“Submit”提交,效果如上篇文章所示。而在服務(wù)器控制臺(tái)有如下輸出:

    Converting String to Locale...
    Calling validateExecute() by reflection...
    Calling validate()...
    Calling execute()...
    Converting Locale to String...

    上述的輸出說(shuō)明了Struts 2.0的數(shù)據(jù)校驗(yàn)工作方式,它需要經(jīng)過(guò)下面幾個(gè)步驟:

    1. 通過(guò)轉(zhuǎn)換器將請(qǐng)求參數(shù)轉(zhuǎn)換成相應(yīng)的Bean屬性;
    2. 判斷轉(zhuǎn)換過(guò)程是否出現(xiàn)異常。如果有,則將其保存到ActionContext中,conversionError攔截器再封裝為fieldError;如果沒(méi)有,進(jìn)行下一步;
    3. 通過(guò)反射(Reflection)來(lái)調(diào)用validateXxx()方法(其中,Xxx表示Action的方法名);
    4. 調(diào)用validate()方法;
    5. 如果經(jīng)過(guò)上述步驟沒(méi)有出現(xiàn)fieldError,則調(diào)用Action方法;如果有,則會(huì)跳過(guò)Action方法,通過(guò)國(guó)際化將fieldError輸出到頁(yè)面。

    不喜歡看文字的朋友,可以參考下面的圖1。

    圖1 校驗(yàn)順序圖
    圖1 校驗(yàn)順序圖

    看到這里可能大家會(huì)疑問(wèn):“這么多地方可以校驗(yàn)表單數(shù)據(jù),到底我應(yīng)該在那里做呢?”有選擇是好事,但抉擇的過(guò)程往往是痛苦的,往往讓人不知所措。如果大家參照以下幾點(diǎn)建議,相信會(huì)比較容易地做出正確的抉擇。

    1. 如果需要轉(zhuǎn)換的數(shù)據(jù),通常做法在轉(zhuǎn)換的時(shí)候做格式的校驗(yàn),在Action中的校驗(yàn)方法中校驗(yàn)取值。假如用戶填錯(cuò)了格式,我們可以通過(guò)在資源文件配置invalid.fieldvalue.xxx(xxx為屬性名)來(lái)提示用戶正確的格式,不同的階段出錯(cuò)顯示不同的信息。具體做法請(qǐng)參考上面的例子;
    2. 至于用validate()還是validateXxx(),我推薦使用validate()。原因是validateXxx()使用了反射,相對(duì)來(lái)說(shuō)性能稍差,而validate()則是通過(guò)接口com.opensymphony.xwork2.Validateable調(diào)用。當(dāng)然如果你的表單數(shù)據(jù)取值是取決于特定Action方法,則應(yīng)該使用validateXxx()。

    在運(yùn)行上面的例子時(shí),在Locale中輸入zh并提交時(shí)出現(xiàn)圖2所示頁(yè)面。

    圖2 錯(cuò)誤格式
    圖2 錯(cuò)誤格式

    在Locale中輸入de_DE時(shí),出現(xiàn)如圖3所示頁(yè)面。

    圖3 取值錯(cuò)誤
    圖3 取值錯(cuò)誤

    使用Struts 2.0的校驗(yàn)框架

    上一節(jié)的內(nèi)容都是關(guān)于如何編程實(shí)現(xiàn)校驗(yàn),這部分工作大都是單調(diào)的重復(fù)。更多情況下,我們使用Struts 2.0的校驗(yàn)框架,通過(guò)配置實(shí)現(xiàn)一些常見(jiàn)的校驗(yàn)。

    我學(xué)習(xí)編程有個(gè)習(xí)慣——喜歡先看輸出結(jié)果,再看代碼實(shí)現(xiàn)。這樣學(xué)的好處是先看結(jié)果可以刺激學(xué)習(xí)的激情,也可以在看代碼前自已思考一下如何實(shí)現(xiàn),然后帶著問(wèn)題去看代碼,那就清晰多了。因此下面我們先來(lái)做演示。

    首先,在tutorial包下新建ValidationAction.java,代碼如下:

    package tutorial;

    import com.opensymphony.xwork2.ActionSupport;

    public class ValidationAction extends ActionSupport {
    ? ?
    private String reqiuredString;

    ? ?
    public String getReqiuredString() {
    ? ? ? ?
    return reqiuredString;
    ? ?}


    ? ?
    public void setReqiuredString(String reqiuredString) {
    ? ? ? ?
    this .reqiuredString = reqiuredString;
    ? ?}

    ? ?
    ? ?@Override
    ? ?
    public String execute() {
    ? ? ? ?
    return SUCCESS;
    ? ?}
    ? ?
    }

    然后,配置上述所建的Ation,代碼片段如下:

    < action name ="ValidationAction" class ="tutorial.ValidationAction" >
    ? ?
    < result > /Output.jsp </ result >
    ? ?
    < result name ="input" > /Input.jsp </ result >
    </ action >

    接著,創(chuàng)建Input.jsp和Output.jsp,內(nèi)容分別如下:

    <% @ page ?contentType = " text/html; charset=UTF-8 " %>
    <% @taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    ? ?
    < title > Hello World </ title >
    ? ?
    <!-- 此標(biāo)志的作用是引入Struts 2.0的常用的Javascript和CSS -->
    ? ?
    < s:head />
    </ head >
    < body >
    ? ?
    < s:form action ="ValidationAction" > ? ? ? ? ? ?
    ? ? ? ?
    < s:textfield name ="reqiuredString" label ="Required String" />
    ? ? ? ?
    < s:submit />
    ? ?
    </ s:form > ? ?
    </ body >
    </ html >
    Input.jsp

    <% @ page ?contentType = " text/html; charset=UTF-8 " %>
    <% @taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    ? ?
    < title > Hello World </ title >
    </ head >
    < body >
    ? ? Required String:
    < s:property value ="reqiuredString" /> ? ?
    </ body >
    </ html >
    Output.jsp

    再接下來(lái),在tutorial包下創(chuàng)建ValidationAction的校驗(yàn)配置文件Xxx-validation.xml(Xxx為Action的類(lèi)名),在本例中該文件名ValidationAction-validation.xml,內(nèi)容如下:

    <? xml version="1.0" encoding="UTF-8" ?>
    <! DOCTYPE validators PUBLIC?
    ? ? ? ? ? "-//OpenSymphony Group//XWork Validator 1.0//EN"?
    ? ? ? ? ? "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
    > ? ? ? ? ?
    < validators >
    ? ?
    < field name ="reqiuredString" >
    ? ? ? ?
    < field-validator type ="requiredstring" >
    ? ? ? ? ? ?
    < message > This string is required </ message >
    ? ? ? ?
    </ field-validator >
    ? ?
    </ field >
    </ validators >

    發(fā)布運(yùn)行應(yīng)用程序,在地址欄中鍵入http://localhost:8080/Struts2_Validation/Input.jsp,出現(xiàn)如圖4所示頁(yè)面。

    圖4 Input.jsp
    圖4 Input.jsp

    直接點(diǎn)擊“Submit”提交表單,出現(xiàn)圖5所示的頁(yè)面。

    圖5 錯(cuò)誤提示
    圖5 錯(cuò)誤提示

    在Required String中隨便填點(diǎn)東西,轉(zhuǎn)到Output.jsp頁(yè)面,如圖6所示。

    圖6 Output.jsp
    圖6 Output.jsp

    通過(guò)上面的例子,大家可以看到使用該校驗(yàn)框架十分簡(jiǎn)單方便。不過(guò),上例還有兩點(diǎn)不足:

    1. 還沒(méi)有國(guó)際化錯(cuò)誤消息;
    2. 沒(méi)有實(shí)現(xiàn)客戶端的校驗(yàn)。

    當(dāng)然,要完善以上不足,對(duì)于Struts 2.0來(lái)說(shuō),只是小菜一碟。

    1. 在Xxx-validation.xml文件中的<message>元素中加入key屬性;
    2. 在Input.jsp中的<s:form>標(biāo)志中加入validate="true"屬性,就可以在用Javascript在客戶端校驗(yàn)數(shù)據(jù)。

    下面是具體的實(shí)現(xiàn),首先在國(guó)際化資源文件中加入錯(cuò)誤消息,然后按照上面說(shuō)明實(shí)現(xiàn)。因?yàn)橐褂肑avascript在客戶端顯示出錯(cuò)信息,所以在加載Input.jsp頁(yè)面時(shí),Struts 2.0需要獲得國(guó)際化的字符串,故我們需要使用Action來(lái)訪問(wèn)Input.jsp頁(yè)面,具體實(shí)現(xiàn)請(qǐng)參考《在Struts 2.0中國(guó)際化(i18n)您的應(yīng)用程序》的最后部分。最后發(fā)布運(yùn)行應(yīng)用程序,直接在頁(yè)面中點(diǎn)擊“Submit”,表單沒(méi)有被提交并出現(xiàn)錯(cuò)誤提示,如圖7所示:

    圖7 客戶端校驗(yàn)
    圖7 客戶端校驗(yàn)

    校驗(yàn)框架是通過(guò)validation攔截器實(shí)現(xiàn),該攔載被注冊(cè)到默認(rèn)的攔截器鏈中。它在conversionError攔截器之后,在validateXxx()之前被調(diào)用。這里又出現(xiàn)了一個(gè)選擇的問(wèn)題:到底是應(yīng)該在action中通過(guò)validateXxx()或validate()實(shí)現(xiàn)校驗(yàn),還是使用validation攔截器?絕大多數(shù)情況,我建議大家使用校驗(yàn)框架,只有當(dāng)框架滿足不了您的要求才自已編寫(xiě)代碼實(shí)現(xiàn)。

    配置文件查找順序

    在上面的例子中,我們通過(guò)創(chuàng)建ValidationAction-validation.xml來(lái)配置表單校驗(yàn)。Struts 2.0的校驗(yàn)框架自動(dòng)會(huì)讀取該文件,但這樣就會(huì)引出一個(gè)問(wèn)題——如果我的Action繼承其它的Action類(lèi),而這兩個(gè)Action類(lèi)都需要對(duì)表單數(shù)據(jù)進(jìn)行校驗(yàn),那我是否會(huì)在子類(lèi)的配置文件(Xxx-validation.xml)中復(fù)制父類(lèi)的配置嗎?

    答案是不,因?yàn)镾truts 2.0的校驗(yàn)框架跟《在Struts 2.0中國(guó)際化(i18n)您的應(yīng)用程序》提到的“資源文件查找順序”相似,有特定的配置文件查找順序。不同的是校驗(yàn)框架按照自上而下的順序在類(lèi)層次查找配置文件。假設(shè)以下條件成立:

    1. 接口 Animal;
    2. 接口 Quadraped 擴(kuò)展了 Animal;
    3. 類(lèi) AnimalImpl 實(shí)現(xiàn)了 Animal;
    4. 類(lèi) QuadrapedImpl 擴(kuò)展了 AnimalImpl 實(shí)現(xiàn)了 Quadraped;
    5. 類(lèi) Dog 擴(kuò)展了 QuadrapedImpl;

    如果Dog要被校驗(yàn),框架方法會(huì)查找下面的配置文件(其中別名是Action在struts.xml中定義的別名):

    1. Animal-validation.xml
    2. Animal-別名-validation.xml
    3. AnimalImpl-validation.xml
    4. AnimalImpl-別名-validation.xml
    5. Quadraped-validation.xml
    6. Quadraped-別名-validation.xml
    7. QuadrapedImpl-validation.xml
    8. QuadrapedImpl-別名-validation.xml
    9. Dog-validation.xml
    10. Dog-別名-validation.xml

    已有的校驗(yàn)器

    Struts 2.0已經(jīng)為您實(shí)現(xiàn)很多常用的校驗(yàn)了,以下在jar的default.xml中的注冊(cè)的校驗(yàn)器。

    < 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 ="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" />
    </ validators >
    關(guān)于每個(gè)校驗(yàn)器的具體用法,請(qǐng)參考以下鏈接:
    http://wiki.javascud.org/display/ww2cndoc/Validation
    該鏈接中還有一些很有的信息,請(qǐng)大家仔細(xì)閱讀。

    總結(jié)

    使用校驗(yàn)框架既可以方便地實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn),又能夠?qū)⑿r?yàn)與Action分離,故我們應(yīng)該盡可能使用校驗(yàn)框架。在使用校驗(yàn)框架時(shí),請(qǐng)不要忘記通過(guò)在資源文件加入invalid.fieldvalue.xxx字符串,顯示適合的類(lèi)型轉(zhuǎn)換出錯(cuò)信息;或者使用conversion校驗(yàn)器。

    posted on 2006-11-14 13:38 Max 閱讀(51490) 評(píng)論(118)  編輯  收藏 所屬分類(lèi): Struts 2.0系列
    評(píng)論共2頁(yè): 1 2 下一頁(yè) 

    評(píng)論:
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-04-19 17:42 | test
    請(qǐng)問(wèn)這個(gè)是什么問(wèn)題?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-19 23:12 | Max
    @huhuyeah
    你是不是設(shè)了<s:form />標(biāo)志的theme屬性?
    正常情況下,生成的Javascript代碼應(yīng)該在</form>之后,如:
    <script type="text/javascript">
    function validateForm_Xxx() {
    ...
    }
    </script>  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-20 09:41 | huhuyeah
    @Max
    是的,我把struts.ui.theme設(shè)置成simple了
    這樣校驗(yàn)就不起作用了。把simple去掉就起作用了
    但是這樣的話會(huì)自動(dòng)生產(chǎn)一些表格。
    能不能表格由我自己定制,而校驗(yàn)依然能使用的方法?
    另外自動(dòng)生產(chǎn)的JS也不是很好,總是提示objectError,然后顯示錯(cuò)誤標(biāo)簽
    我是希望提示的時(shí)候就把錯(cuò)誤的信息直接alert出來(lái)
    這種能不能通過(guò)設(shè)置解決,謝謝  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-20 12:02 | mm
    這里的文章很好耶!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-04-20 15:11 | Leo
    你好,有個(gè)問(wèn)題請(qǐng)教一下,已經(jīng)發(fā)到你的郵箱里了,有時(shí)間時(shí)請(qǐng)幫忙解答一下,謝謝!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-23 15:46 | mm
    如何進(jìn)行客戶端校驗(yàn)?是自己寫(xiě)javascript代碼,還是配置Xxx-Validation.xml文件來(lái)實(shí)現(xiàn)?我想用我自己的javascript代碼,怎么用呢?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-24 13:53 | jiajia
    我的LoginAction里面有兩個(gè)方法:init,login。如果我要讓init方法執(zhí)行時(shí)不驗(yàn)證,logic方法執(zhí)行時(shí)做驗(yàn)證,該怎么配置,
    我的LoginAction-validation.xml的內(nèi)容是:
    <validators>
    <field name="userId">
    <field-validator type="requiredstring">
    <message key="required"/>
    </field-validator>
    </field>
    </validators>
    struts.xml的內(nèi)容是:
    <package name="loginAction" extends="struts-default">
    <action name="login" class="login.LoginAction">
    <result name="sussessInit">/WEB-INF/jsp/login.jsp</result>
    <result name="sussessLogin">/WEB-INF/jsp/main.jsp</result>
    <result name="input">/WEB-INF/jsp/login.jsp</result>
    </action>
    </package>
    請(qǐng)賜教  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-25 09:40 | huhuyeah
    @mm
    兩種都可以。
    如果用自己的js,在form的onsumbit時(shí)候里面調(diào)用自己的js就可以了
    也可以在提交按鈕里面onclick調(diào)用自己的校驗(yàn)js再forms[0].submit()來(lái)提交表單  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-25 09:47 | Max
    @mm
    建議使用Struts 2的validation框架。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-25 09:49 | Max
    最簡(jiǎn)單的方法就是將你的LoginAction-validation.xml文件改名為“LoginAction-login-validation.xml”。這樣validation的配置只對(duì)login起作用。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-25 13:42 | ddd
    使用JS的話, 也有他的好處, 減少和Server間的通信,

    Server端校驗(yàn)的話, 用Struts準(zhǔn)備的也可以。。

    不過(guò),偶以前做的項(xiàng)目,都是自己寫(xiě)校驗(yàn)的類(lèi)。。。

    幾乎沒(méi)用過(guò)validation  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-26 14:42 | jiajia
    文章中的驗(yàn)證是用xwork提供的方法,action方法要繼承ActionSupport,如果不用xwork提供的驗(yàn)證,使用Struts 2的validation框架驗(yàn)證,驗(yàn)證走DWRValidator類(lèi)提供的方法,應(yīng)該怎么辦?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-04-26 15:01 | ddd
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-03 22:45 | jezz
    在第一個(gè)例子有點(diǎn)小問(wèn)題
    validation.loc = 區(qū)域必須為中國(guó)或美國(guó)
    這個(gè)我顯示出錯(cuò),沒(méi)有顯示出錯(cuò)信息,直接把validate.loc顯示出來(lái)了!
    后來(lái)我把
    validate.loc = 區(qū)域必須為中國(guó)或美國(guó)
    就可以顯示了!

    我直接在關(guān)注你的文章!
    已經(jīng)加了你的gtalk很少看到你!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-04 23:26 | Max
    @jezz
    對(duì)不起,最近比較忙一點(diǎn)。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-06-07 20:42 | Oliver
    huhuyeah,你那個(gè)關(guān)于theme的驗(yàn)證問(wèn)題解決了嗎?我和你碰到了一樣的煩惱,郁悶啊,不知該怎么辦!!!!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-06-07 22:19 | Oliver
    我的action配置為
    <action name="類(lèi)名" class="...">
    <interceptor-ref name="validationWorkflowStack"/>
    <result>list.jsp</result>
    <result name="list" type="redirect-action">類(lèi)名!list</result>
    <result name="input">edit.jsp</result>
    </action>
    在edit.jsp頁(yè)面中,通過(guò)"類(lèi)名!save.action"來(lái)進(jìn)行保存,另外配置了"類(lèi)名-save-validation.xml"文件。
    我的問(wèn)題的,當(dāng)把驗(yàn)證配置文件改名為"類(lèi)名-validation.xml"時(shí),會(huì)對(duì)用"類(lèi)名"加"!"方式訪問(wèn)的所有方法進(jìn)行驗(yàn)證,可以只想對(duì)save方法進(jìn)行驗(yàn)證,但將配置文件更名為"類(lèi)名-save-validation.xml"后,驗(yàn)證就不起作用了.............  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-06-07 22:20 | Oliver
    @Oliver
    可“是”只想對(duì)save方法進(jìn)行驗(yàn)證,打錯(cuò)一個(gè)字:(  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-11 14:23 | Mosquito
    為什么我一進(jìn)頁(yè)面錯(cuò)誤提示就出現(xiàn)呢??
    沒(méi)提交之前就出現(xiàn)。。。。
    為什么,幫忙分析一下原因唄!!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-12 11:25 | wldandan
    樓主,我的Action 定義如下
    <action name="save" class="ManagerConfigAction"
    method="save">
    <result name="input" type="dispatcher">/Conf/mozartConf.jsp</result>
    <result type="redirect">/mozartConf/show.action</result>
    </action>

    然后定義了validator配置文件
    運(yùn)行后,當(dāng)在input框輸入錯(cuò)誤值時(shí),錯(cuò)誤提示信息可以顯示出來(lái),但服務(wù)器端還是對(duì)數(shù)據(jù)進(jìn)行了保存啊!!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-19 17:40 | jpma
    請(qǐng)問(wèn):"在Xxx-validation.xml文件中的<message>元素中加入key屬性; "
    這個(gè)怎么操作啊?
    謝謝了!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-21 17:01 | jpma
    @jpma
    自己找到答案了,我是這樣寫(xiě)的,功能實(shí)現(xiàn)了,不知有沒(méi)有其它的方式。
    修改Xxx-validation.xml文件中的<validators>部分
    <validators>
    <field name="reqiuredString">
    <field-validator type="requiredstring">
    <message key="validation.req" />
    </field-validator>
    </field>
    </validators>

    其中key的值對(duì)應(yīng)globalMessages_en_US.properties與globalMessages_zh_CN.properties中“validation.req”
    -------------------------------------------------
    HelloWorld=HelloWorld!
    invalid.fieldvalue.loc = Locale must like \ " xx_XX\ "
    validation.loc = Locale must be China or USA
    validation.require=${getText(fileName)} is required
    validation.rqu=This string is required
    -------------------------------------------------  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-21 17:05 | jpma
    最后一行寫(xiě)錯(cuò)了,是
    validation.req=This string is required

    globalMessages_zh_CN.properties內(nèi)容
    -------------------------------------------------
    HelloWorld=你好,世界!哈哈
    invalid.fieldvalue.loc = Locale必須為\ " xx_XX\ " 的格式
    validation.loc = 區(qū)域必須為中國(guó)或美國(guó)
    validation.require=${getText(fileName)} is required
    validation.req=字符串不可為空
    -------------------------------------------------  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-06-26 00:00 | jezz
    那不用寫(xiě)javascript驗(yàn)證啊?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-04 17:39 | 任遨游
    在</form>這后已產(chǎn)生了js,為什么驗(yàn)證不起作用呢,并沒(méi)有提示信息
    <script type="text/javascript">
    function validateForm_ValidationAction() {
    form = document.getElementById("ValidationAction");
    clearErrorMessages(form);
    clearErrorLabels(form);

    var errors = false;

    return !errors;
    }
    </script>  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-04 23:30 | Max
    @任遨游
    --------------------------------------------
    在Input.jsp中的<s:form>標(biāo)志中加入validate="true"屬性,就可以在用Javascript在客戶端校驗(yàn)數(shù)據(jù)。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-05 11:59 | 任遨游
    @Max

    以下是我input.jsp代碼,可是還是不起作用
    <%@ page contentType="text/html;charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title> Hello World </title>
    <!-- 姝ゆ爣蹇楃殑浣滅敤鏄紩鍏truts 2.0鐨勫父鐢ㄧ殑Javascript鍜孋SS -->
    <s:head/>
    </head>
    <body>
    <s:form action="ValidationAction" validate="true">
    <s:textfield name="reqiuredString" label="Required String" />
    <s:submit/>
    </s:form>
    </body>
    </html>   回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-05 15:16 | 妖狐
    Struts2.x是否可以像Struts1.x那樣使用統(tǒng)一的表單校驗(yàn)文件validation.xml  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-05 22:40 | Max
    @妖狐
    我認(rèn)為不可以。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-06 11:28 | 任遨游
    表單校驗(yàn)很重要,max的所有例子我都運(yùn)行了下,只有這個(gè)校驗(yàn),還有那個(gè)showproduct.jsp這兩個(gè)例子
    怎么也調(diào)不過(guò)去了。郁悶ing  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-11 15:21 | 任遨游
    沒(méi)有回復(fù)了?我用的struts2.0.8,怎么校驗(yàn)不起作用呢  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-11 22:37 | Max
    @任遨游
    三言兩語(yǔ),我也幫不了你。
    不如你留下Email,我有空的時(shí)候可以將例子的源碼發(fā)你。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-12 09:35 | 任遨游
    @Max
    supershan@163.com,非常感謝  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-19 19:38 | 游客
    今天用一下validator框架,也遇到了這個(gè)問(wèn)題真是郁悶極了.
    哪位知道解決辦法啊?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-21 12:01 | tans
    我的驗(yàn)證都通過(guò)了,但是驗(yàn)證錯(cuò)誤信息提示老顯示在上方,有沒(méi)有什么辦法可以讓它顯示在驗(yàn)證行之后呢?還有有哪位老大把他那官方Using FieldValidators示例調(diào)式通過(guò)了的啊,為什么我老提示No result defined for action  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-07-24 17:10 | 任遨游
    這個(gè)例子通過(guò)了,其實(shí)max的例子都是可以的,有時(shí)運(yùn)行不通過(guò),很有可能是配置時(shí),只差了一點(diǎn)點(diǎn)。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-13 16:46 | tans
    能不能修改錯(cuò)誤信息顯示的位置啊?顯示在上方不太好看?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-14 13:55 | 陳利
    如果在表單中填入數(shù)字,而且是必填的,如何寫(xiě)配置文件啊?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-16 11:14 | darvsum
    講解得相當(dāng)透徹。謝謝  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-20 17:25 | 甲生
    如果使用框架驗(yàn)證,每一個(gè)action需要一個(gè)相應(yīng)的配置文件,那豈不是增加了工作量?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-20 17:33 | 甲生
    文章寫(xiě)到后面,怎么草草收兵了,頗有不解之處  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-20 23:53 | Max
    @甲生
    1、“增加了工作量”這個(gè)問(wèn)題可以說(shuō)是見(jiàn)仁見(jiàn)智;
    2、有些東西是“師傅領(lǐng)入門(mén),修行靠自己”;我本人能力和時(shí)間有限,所以不可以面面俱到。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-21 08:27 | 甲生
    是的,雖然有些不懂,但也學(xué)了不少,非常感謝!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-22 11:03 | romatory
    為什么使用自定義校驗(yàn)器不行,
    嚴(yán)重: Servlet.service() for servlet default threw exception
    java.lang.ExceptionInInitializerError
    at com.opensymphony.xwork2.validator.ValidatorFileParser.
    addValidatorConfigs(ValidatorFileParser.java:192)  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-22 16:51 | zouzhihua
    把validate="true"這個(gè)加上之后會(huì)出現(xiàn)
    FreeMarker template error!

    Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@10699ea
    The problematic instruction:
    ----------
    ==> ${validator.getMessage(action)?js_string} [on line 28, column 26 in template/xhtml/form-close-validate.ftl]
    in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 3, column 1 in template/xhtml/form-close.ftl]
    ----------

    Java backtrace for programmers:
    ----------
    freemarker.template.TemplateModelException: Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@10699ea  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-22 16:52 | zouzhihua
    在線等待解決  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-23 15:56 | pxcong
    @Max
    你寫(xiě)的文章太好啦,講解的也很仔細(xì),可以出書(shū)了,呵呵~:)
    能幫我解決下 提交前就進(jìn)行驗(yàn)證的問(wèn)題,(我不想在未提交前就輸出警告信息,如:字符不為空。)
    如果好的例子的話可以發(fā)給我嗎?
    郵箱:pxcong007@126.com
      回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-28 12:06 | louleigh
    max哥..小弟又來(lái)拜讀你的大作啦..
    請(qǐng)問(wèn)一下。
    在alidation框架下面。
    如果想用紅色顯示該怎么做啊。.
      回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-28 12:11 | louleigh
    如果按照你的第一種方法來(lái)弄。.則會(huì)顯示兩個(gè).
    一個(gè)是紅色的.一個(gè)是黑色的。請(qǐng)問(wèn)應(yīng)該怎么解決也  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-28 23:09 | Max
    @louleigh
    不是很明白你的問(wèn)題,能否詳細(xì)一點(diǎn)  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-08-30 08:44 | louleigh
    我的問(wèn)題就是你驗(yàn)證后要提示錯(cuò)誤信息嘛。

    怎么把那個(gè)錯(cuò)誤信息變成紅色的。。

    我看了一下我的表達(dá)好象是有點(diǎn)問(wèn)題。。

    我現(xiàn)在的問(wèn)題是他要提示錯(cuò)誤。

    但是錯(cuò)誤顯示是黑色的。。

    我可以在他前面加上

    <div style="color:red"><s:fielderror></div>

    但是這樣的話。他就會(huì)顯示兩次錯(cuò)誤信息。

    我想顯示一次。并且讓他成為紅色。

    請(qǐng)問(wèn)該怎么做。

    麻煩你啦。。max哥  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 15:59 | louleigh
    我配置出來(lái)的后。。
    validation他顯示的顏色是黑色。。。
    我的意思大概就是這個(gè)  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 16:29 | gdm
    我的程序怎么出不來(lái)呢?加上驗(yàn)證的就過(guò)不去。請(qǐng)教高手除了寫(xiě)actionname-validation.xml 以外還需要配置別的地方嗎?謝謝
      回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 16:33 | ts
    按照上面的配置之后,運(yùn)行出以下的錯(cuò)誤
    Document is invalid: no grammar found
    請(qǐng)問(wèn)該如何解決  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 16:41 | louleigh
    @gdm
    actionname-validation.xml除了這個(gè)玩意兒沒(méi)有地方需要寫(xiě)了
    請(qǐng)你把max的例子。。仔細(xì)看下哪里整錯(cuò)了沒(méi)有。
    max的例子是絕對(duì)正確的

    仔細(xì)檢查  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 16:42 | louleigh
    max我知道問(wèn)題出在哪里了
    問(wèn)題出在
    我以前沒(méi)有寫(xiě)<s:head/>
    這個(gè)東西。。
    現(xiàn)在用了這個(gè)就可以變色了

    請(qǐng)問(wèn)s:head是實(shí)現(xiàn)的什么東西啊

    我可以重寫(xiě)他的內(nèi)容嗎。

    他改變了我頁(yè)面的其他顯示啊。。

    我不想用他的字體。。如果知道請(qǐng)回答  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-01 16:47 | gdm
    首先感謝louleigh的回復(fù),我閱讀好幾遍了
    以下是我的RegisterAction-validation.xml中寫(xiě)到的
    <?xml version="1.0" encoding="UTF-8"?>
    <validators>
    <field name ="user.username">
    <field-validator type ="requiredstring">
    <message> This string is required </message>
    </field-validator>
    </field>
    <field name="user.password">
    <field-validator type="requiredstring">
    <message>You must enter a value for password.</message>
    </field-validator>
    <field-validator type="fieldexpression">
    <param name="expression">
    user.password == user.verifyPassword
    </param>
    <message>Passwords don't match.</message>
    </field-validator>
    </field>
    <field name="user.birthday">
    <field-validator type="date">
    <param name="min">12/22/1980</param>
    <param name="max">9/1/2007</param>
    <message>The date must be between 12-22-2002 and 12-25-2002.</message>
    </field-validator>
    </field>

    <field name="user.email">
    <field-validator type="email">
    <message>You must enter a valid email.</message>
    </field-validator>
    </field>
    <field name="user.age">
    <field-validator type="int">
    <param name="min">6</param>
    <param name="max">100</param>
    <message>
    Age must be between ${min} and ${max}, current value is
    ${user.age}.
    </message>
    </field-validator>
    </field>
    </validators>
    下面是struts.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <package name="default" extends="struts-default">
    <action name="reg"
    class="com.gdm.actions.RegisterAction.RegisterAction">
    <result name="success" type="dispatcher">
    <param name="location">/result.jsp</param>
    </result>

    <result name="input" type="dispatcher">
    <param name="location">/register.jsp</param>
    </result>

    <interceptor-ref name="validationWorkflowStack"/>
    </action>
    </package>

    </struts>
    請(qǐng)教高手幫忙分析一下!在線等  回復(fù)  更多評(píng)論
      
    # validate失敗以后,畫(huà)面中的list重新復(fù)值得問(wèn)題 2007-09-05 18:19 | elegant
    我用validate-別名-validate.xml方式驗(yàn)證畫(huà)面的數(shù)據(jù)項(xiàng)目,如果失敗的情況下,直接返回到提交畫(huà)面,但是這個(gè)畫(huà)面的list項(xiàng)目還沒(méi)有設(shè)定(因?yàn)闆](méi)有進(jìn)入action)我怎么做才能重新這個(gè)list得值呢  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-07 17:04 | 大米
    @zouzhihua
    跟你的問(wèn)題一模一樣。沒(méi)人解答 算了...等我解決告訴你  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-09-11 11:32 | bqshi
    @大米

    這個(gè)問(wèn)題的直接原因是validationsupport.getMessage的時(shí)候需要根據(jù)你傳進(jìn)來(lái)的action對(duì)象o,得到o.class的log,產(chǎn)生了nullpoiter exception,根本原因是沒(méi)有通過(guò)action訪問(wèn)jsp文件,所以傳進(jìn)來(lái)的action是null。
    我的mail:shiboqing@gmail.com  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-10-09 14:59 | yangdamao
    @Max
    請(qǐng)問(wèn):"1.在Xxx-validation.xml文件中的<message>元素中加入key屬性;
    2.在Input.jsp中的<s:form>標(biāo)志中加入validate="true"屬性,就可以在用Javascript在客戶端校驗(yàn)數(shù)據(jù)。 "這兩條是不是不能同時(shí)實(shí)現(xiàn)啊?
    我試驗(yàn)了一下,如果滿足了第一條的情況下,再加上validate="true",就會(huì)出現(xiàn)
    和zouzhihua & 大米 一樣的錯(cuò)誤提示.但是只滿足第貳條時(shí),就可以在客戶端進(jìn)行驗(yàn)證.還請(qǐng)Max先生解釋一下!Tks!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-11-09 16:16 | jiang
    我在做驗(yàn)證的一個(gè)例子:
    在注冊(cè)時(shí),通常要輸入密碼和驗(yàn)證密碼兩項(xiàng)內(nèi)容,請(qǐng)問(wèn)如何才能用validation.xml來(lái)進(jìn)行驗(yàn)證.
    我看了幾個(gè)例子,但是它們的輸入數(shù)據(jù)都是只能一個(gè),如何往validation.xml中傳入兩個(gè)數(shù)據(jù)呢?
    請(qǐng)你幫我解決一下,謝謝了!
      回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-11-17 15:48 | sophia
    頁(yè)面第一次顯示的時(shí)候,不想引發(fā)驗(yàn)證。該怎么設(shè)置呢?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2007-11-29 09:36 | Elven
    Struts2,好東西!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-11-29 17:01 | Elven
    各位,為什么我的校驗(yàn)框架,無(wú)論是在輸入出錯(cuò)或者沒(méi)有出錯(cuò)的時(shí)候都會(huì)拋出錯(cuò)誤呢?
    補(bǔ)充:我是按照max的流程來(lái)做的。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2007-12-16 16:49 | way
    為什么我完全按照例子來(lái)的 可是不輸入任何內(nèi)容的時(shí)候也會(huì)正常顯示 只是為空罷了 大家認(rèn)為錯(cuò)誤最可能出在哪了 ?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-01-02 11:52 | javer
    很不錯(cuò),收藏.  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-01-03 22:19 | socretes
    我測(cè)試client端的驗(yàn)證,但是我發(fā)現(xiàn)其實(shí)根本是 虛的,我可以斷定表單依然提交到了后臺(tái)然后才進(jìn)行驗(yàn)證的,我不知道這里是否有人真正實(shí)現(xiàn)過(guò)。
    我發(fā)現(xiàn)的問(wèn)題是,雖然驗(yàn)證js代碼都生成了,但是不能執(zhí)行,原因是找不到clearErrorMessages(form); 方法,而且我觀察可能是要加載的<script type="text/javascript" src="/testss1/struts/xhtml/validation.js"></script> 找不到的緣故,因?yàn)檫@個(gè)目錄根本就不存在,testss1是本人測(cè)試的應(yīng)用。

    望這里有高手回答我疑惑,萬(wàn)分感激!!
    能給我郵件最好: yuchw(at)capitek.com.cn  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-01-10 16:22 | bill
    謝謝您提供給我們這么好一篇文章,對(duì)我最近的工作帶來(lái)了很大幫助。

    有個(gè)小問(wèn)題:在深入理解一段時(shí)間后,發(fā)現(xiàn)struts2的校驗(yàn)流程比您描述的還要復(fù)雜一點(diǎn)(您文章文章中的流程圖),應(yīng)該是js+攔截器1+攔截器2三個(gè)階段。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-01-18 13:26 | song
    @zouzhihua
    我也遇到了,你解決了嗎?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-01-29 15:56 | 小周
    請(qǐng)問(wèn)如何才能修改struts 2.0中錯(cuò)誤顯示的位置呢。就是用驗(yàn)證框架后返回到頁(yè)面上顯示的報(bào)錯(cuò)信息,
    默認(rèn)是顯示控件的上方(紅色),但是我現(xiàn)在想讓它顯示在控件的右邊。
    如何處理.......  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-01-29 15:57 | 小周
    這個(gè)問(wèn)題有點(diǎn)急,項(xiàng)目里面要用。
    哎找了很多資料都沒(méi)有找到。
    請(qǐng)大家?guī)臀乙幌拢?
    謝謝了  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-02-02 15:19 | 日本の項(xiàng)目に対する新人
    需要在指定位置輸出錯(cuò)誤信息時(shí),form主題theme不能設(shè)置成默認(rèn),應(yīng)是simple,默認(rèn)的主題會(huì)在每個(gè)控件上面輸出錯(cuò)誤信息。然后在你需要輸出錯(cuò)誤信息的地方用
    <s:fielderror>
    <s:param value="%{'fieldname'}"/></s:fielderror>  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-02-14 15:51 | happy
    我是剛剛接觸struts2.0
    我寫(xiě)的驗(yàn)證但是沒(méi)有反映,也沒(méi)有錯(cuò)誤  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-03-04 16:41 | 小周
    @日本の項(xiàng)目に対する新人
    這個(gè)方法可以,但是頁(yè)面的格式和布局不是很好看,有沒(méi)有方法讓框架產(chǎn)生的HTML頁(yè)面顯示錯(cuò)誤信息時(shí)不產(chǎn)生<ui><li>標(biāo)簽?zāi)兀?nbsp; 回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-03-04 16:43 | 小周
    <s:fielderror>
    <s:param value="%{'fieldname'}"/></s:fielderror>

    上面的方法很好。
    但是頁(yè)面的格式和布局不是很好看,有沒(méi)有方法讓框架產(chǎn)生的HTML頁(yè)面顯示錯(cuò)誤信息時(shí)不產(chǎn)生<ui><li>標(biāo)簽?zāi)兀?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-03-05 10:56 | Nick
    @mz

    原因是在校驗(yàn)配置文件***-validation.xml中使用了package.properties中消息鍵,該消息資源中的消息在不調(diào)用Action是不能使用的,只有調(diào)用Action,該頁(yè)面對(duì)應(yīng)的校驗(yàn)配置文件***-validation.xml才能使用了package.properties中消息鍵。所以直接調(diào)用ordernew.jsp是不行的  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-03-05 10:57 | Nick
    @test
    原因是在校驗(yàn)配置文件***-validation.xml中使用了package.properties中消息鍵,該消息資源中的消息在不調(diào)用Action是不能使用的,只有調(diào)用Action,該頁(yè)面對(duì)應(yīng)的校驗(yàn)配置文件***-validation.xml才能使用了package.properties中消息鍵。所以直接調(diào)用ordernew.jsp是不行的  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-03-05 10:57 | Nick
    @zouzhihua

    原因是在校驗(yàn)配置文件***-validation.xml中使用了package.properties中消息鍵,該消息資源中的消息在不調(diào)用Action是不能使用的,只有調(diào)用Action,該頁(yè)面對(duì)應(yīng)的校驗(yàn)配置文件***-validation.xml才能使用了package.properties中消息鍵。所以直接調(diào)用ordernew.jsp是不行的  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-04-25 11:10 | 懶人
    感謝樓主百忙中給我們整理資料  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-05-13 15:21 | Min
    @Nick
    是的,可以改為
    < action name ="HelloWorld_*" class ="tutorial.HelloWorld" method="{1}">
    < result > /HelloWorld.jsp </ result >
    < result name ="input" > /HelloWorld.jsp </ result >
    </ action >
    然后訪問(wèn)
    http://localhost:8080/Struts2_Validation/HelloWorld_input.action  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-05-14 18:04 | 類(lèi)風(fēng)
    請(qǐng)問(wèn)在ActionName-validation.xml中如何對(duì)double類(lèi)型的變量進(jìn)行驗(yàn)證,我是這樣寫(xiě)的
    <field name="price">
    <field-validator type="conversion" short-circuit="true">
    <param name="repopulateField">true</param>
    <message>價(jià)格必須是數(shù)字類(lèi)型</message>
    </field-validator>
    <field-validator type="double" >
    <param name="min">1</param>
    <message>價(jià)格必須大于1元</message>
    </field-validator>
    </field>

    它默認(rèn)在文本框中顯示0.0 ,價(jià)格的范圍還是驗(yàn)證不了,請(qǐng)問(wèn)這到底是什么原因,我該如何解決?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-05-22 15:20 | oskin
    樓主您好,我是struts2新手.在調(diào)試你上面給的校驗(yàn)框架的那個(gè)例子的時(shí)候,出現(xiàn)問(wèn)題了.代碼都是照搬過(guò)來(lái)的,但是在我這執(zhí)行就是不正確,不知道為什么?頭大!
    錯(cuò)誤代碼如下:

    2008-5-22 15:08:34 org.apache.struts2.components.Form evaluateExtraParamsServletRequest
    警告: No configuration found for the specified action: 'ValidationAction.action' in namespace: '/'. Form action defaulting to 'action' attribute's literal value.

    這個(gè)警告會(huì)出來(lái)兩遍~~然后程序是沒(méi)有執(zhí)行校驗(yàn),隨便輸入什么值都沒(méi)有執(zhí)行action...
    當(dāng)我把<s:form>換成普通的<form action=...>時(shí),上面的錯(cuò)誤警告就沒(méi)了,但是還是沒(méi)有執(zhí)行到action.只有把ValidationAction-validation.xml挪到別的地方,action才會(huì)被執(zhí)行...

    另外我把<s:form action="ValidationAction.action">寫(xiě)成這樣才能找到action,看到一些文章說(shuō)是不需要寫(xiě)上.action的,我不知道哪里設(shè)置~~

    問(wèn)題比較多,希望能幫幫忙,謝謝了.如果可能的話,能不能把上面的例子項(xiàng)目給發(fā)到我郵箱? oskin2002@gmail.com 再次感謝.

      回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-05-22 17:35 | oskin
    補(bǔ)充一下,上面那個(gè)警告是在刷新Input.jsp的時(shí)候就出現(xiàn)的  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-05-26 12:02 | kevin
    submit后提示Invalid field value for field "loc".這是為什么啊?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-07-09 13:04 | kane82
    關(guān)于struts2的驗(yàn)證。我在做的demo的時(shí)候碰到這么個(gè)問(wèn)題,struts.xml文件的input配置jsp頁(yè)面沒(méi)有問(wèn)題,但是如果配置input跳到action的話,怎么也不能跳過(guò)去。
    請(qǐng)問(wèn)LZ該怎么解決這個(gè)問(wèn)題啊!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-07-28 18:33 | se
    @kevin
    用局部資源 全局的無(wú)法找到  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2008-08-06 17:37 | matrix
    @Max
    文中“...Struts 2.0的校驗(yàn)框架自動(dòng)會(huì)讀取該文件,但這樣就會(huì)引出一個(gè)問(wèn)題——如果我的Action繼承其它的Action類(lèi),而這兩個(gè)Action類(lèi)都需要對(duì)表單數(shù)據(jù)進(jìn)行校驗(yàn),那我是否會(huì)在子類(lèi)的配置文件(Xxx-validation.xml)中復(fù)制父類(lèi)的配置嗎?答案是不,因?yàn)?..”

    怎么我看了后面的解釋,我覺(jué)得你應(yīng)該說(shuō)“答案是肯定的”,怎么是“不”呢?
    因?yàn)檎漳愕囊馑际牵日腋割?lèi)配置,然后再找子類(lèi)(自己)配置,不正是你所說(shuō)的復(fù)制父類(lèi)的配置嗎???  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-08-12 11:11 | xmy
    @日本の項(xiàng)目に対する新人
    這個(gè)方法好像不行啊,我試了下,可是錯(cuò)誤提示還是在頂上,倒是設(shè)置了theme=“simple”后我的標(biāo)簽什么的都沒(méi)了  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2008-10-21 20:01 | xiaosong
    看到您的博客收獲很多,文章寫(xiě)的非常詳細(xì),很容易理解,祝博客越來(lái)越好  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2009-01-18 22:37 | shuzigui
    我運(yùn)行你的第二個(gè)例子時(shí),在里面輸入了字符串,結(jié)果報(bào)錯(cuò)是:
    root cause

    org.apache.jasper.JasperException: org.apache.jasper.JasperException: File "/struts-tags " not found

    請(qǐng)問(wèn)這是怎么回事,如果不輸入可以正常運(yùn)行  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2009-04-22 09:36 | jezz
    呵呵不錯(cuò)!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2009-07-01 10:26 | dfd
    sfsafasf  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2009-10-17 00:42 | Martson
    @socretes
    遇到同樣的問(wèn)題,不知道為什么。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2010-09-26 10:45 | 風(fēng)里面
    麻煩也發(fā)我一份 謝謝 public_private@163.com  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2010-11-14 15:35 |
    @kane82
    這個(gè)問(wèn)題,和你寫(xiě)了一個(gè)死循環(huán)沒(méi)有區(qū)別。  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2011-03-29 00:42 | 劉軒
    你好,我想問(wèn)個(gè)事,就是我在試用框架驗(yàn)證時(shí) 我的struts.xml中action節(jié)點(diǎn)是這樣的<action name="*_metaAction" class="com.ewaytec.merchant.product.action.AddAndEditMetaAction" method="{1}" > 那我那個(gè)驗(yàn)證配置文件的名字怎么命名?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2013-04-10 11:15 | tang
    要不您發(fā)個(gè)源碼給我吧,ianafollow@163.com,謝謝!  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation) 2013-11-08 15:40 | 胡應(yīng)
    怎么去掉圓點(diǎn)兒啊?  回復(fù)  更多評(píng)論
      
    # re: 在Struts 2.0中實(shí)現(xiàn)表單數(shù)據(jù)校驗(yàn)(Validation)[未登錄](méi) 2014-04-08 12:56 | 李林
    怎么去掉圓點(diǎn)兒啊!  回復(fù)  更多評(píng)論
      
    評(píng)論共2頁(yè): 1 2 下一頁(yè) 
    主站蜘蛛池模板: 成人无码精品1区2区3区免费看| 亚洲精品无码不卡在线播放HE| 亚洲AV永久无码精品一区二区国产| 亚洲欧美中文日韩视频| 久九九精品免费视频| 亚洲人成免费电影| 99久久免费国产精品特黄| 亚洲中文字幕久久精品无码2021| 青娱乐免费视频在线观看| 亚洲入口无毒网址你懂的| 最近最好的中文字幕2019免费| 亚洲综合无码无在线观看| 四虎成人免费大片在线| 亚洲av永久中文无码精品| 国产v片免费播放| 一级做a爰片性色毛片免费网站| 亚洲精品无码久久不卡| 中文字幕一区二区三区免费视频| 国产亚洲人成无码网在线观看| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲成人午夜在线| 91网站免费观看| 在线观看亚洲AV每日更新无码| 破了亲妺妺的处免费视频国产| 看一级毛片免费观看视频| 久久久久亚洲av成人无码电影| a在线免费观看视频| 亚洲伊人tv综合网色| 99热在线精品免费全部my| 久久综合亚洲色hezyo| 亚洲色婷婷综合开心网| 在线涩涩免费观看国产精品| 亚洲网红精品大秀在线观看| 蜜桃视频在线观看免费网址入口| 日韩欧美亚洲国产精品字幕久久久 | 亚洲电影唐人社一区二区| 欧美大尺寸SUV免费| 老牛精品亚洲成av人片| 中文字幕第13亚洲另类| 久久爰www免费人成| 亚洲一区中文字幕在线电影网 |