繁体   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