簡體   English   中英

如何在Struts2中驗證Dropdown

[英]How to validate Dropdown in Struts2

我正在編寫一個動作類,其中我想使用Struts2打印錯誤。 在我的JSP頁面中,我有一個下拉列表,其中有10個狀態。 當我部署應用程序時, Null的域錯誤總是顯示出來,甚至沒有單擊任何按鈕。 如果用戶沒有從下拉列表中選擇任何狀態,我希望打印該錯誤。

動作類:

public String modifyState() {
        CatastropheDataTO catDataTo = new CatastropheDataTO();

        try {
            catDataTo.setState(this.state);
            catDataTo.setActive(Boolean.valueOf(this.active));
            catDataTo.setStartDate(this.startDate);

            if( getState() != null ||  getActive() != null || getStartDate() != null ) {
                getCatastropheManager().updateCatastropheData(catDataTo);
                addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText());

            } else if(getState() == null){
                addFieldError("state", "Please select a state");
            }

        } catch (Exception ex) {
            addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText());
        }
        return SUBMIT;
    }

不知何故,由於總是出現"Please select a state" ,因此getState()始終為null,而我希望如果用戶直接單擊提交按鈕而不選擇任何狀態,則將其打印出來。

只需使用兩個動作( 可以是同一Java類的兩個方法 ),第一個動作呈現頁面,第二個動作執行應該在按下按鈕后執行的業務。

在你的情況下:

public String showStates() {
    return SUCCESS;
}

public String modifyState() {
    CatastropheDataTO catDataTo = new CatastropheDataTO();

    try {
        catDataTo.setState(this.state);
        catDataTo.setActive(Boolean.valueOf(this.active));
        catDataTo.setStartDate(this.startDate);

        if( getState() != null ||  getActive() != null || getStartDate() != null ) {
            getCatastropheManager().updateCatastropheData(catDataTo);
            addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText());

        } else if(getState() == null){
            addFieldError("state", "Please select a state");
        }

    } catch (Exception ex) {
        addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText());
    }
    return SUBMIT;
}

就是說,您的方法繞過了框架的機制,為您提供了一些內置的方法來執行驗證( validate()XMLannotations ...)。

最相似的你正在使用的一個是validate()是(防止前面解釋的問題再次出現,可以適用於只有一些方法方法,而不是對類的所有操作方法,與validateXXX()@SkipValidation

結果將是這樣的:

@SkipValidation
public String showStates() { // call this the first time
    return SUCCESS; // or INPUT, or whatever
}

public void validate(){
    if(getState() == null){
        addFieldError("state", "Please select a state");
    }
}

public String modifyState() {
    CatastropheDataTO catDataTo = new CatastropheDataTO();

    try {
        catDataTo.setState(this.state);
        catDataTo.setActive(Boolean.valueOf(this.active));
        catDataTo.setStartDate(this.startDate);

        if( getActive() != null || getStartDate() != null ) {
            getCatastropheManager().updateCatastropheData(catDataTo);
            addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText());

        } 

    } catch (Exception ex) {
        addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText());
    }
    return SUBMIT;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM