Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证Struts2中的下拉列表_Java_Validation_Struts2_Struts Action_Interceptorstack - Fatal编程技术网

Java 如何验证Struts2中的下拉列表

Java 如何验证Struts2中的下拉列表,java,validation,struts2,struts-action,interceptorstack,Java,Validation,Struts2,Struts Action,Interceptorstack,我正在编写一个action类,希望在其中使用Struts2打印错误。在我的JSP页面中,我有一个下拉列表,其中有10个状态。当我部署应用程序时,Null的字段错误总是出现,甚至没有单击任何按钮。如果用户没有从下拉列表中选择任何状态,我希望打印该错误 动作类: public String modifyState() { CatastropheDataTO catDataTo = new CatastropheDataTO(); try {

我正在编写一个action类,希望在其中使用
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;
    }
不知何故,
getState()
始终为空,因此始终会显示
“请选择一个状态”
,而我希望如果用户直接单击提交按钮而不选择任何状态,则打印此内容

只需使用两个操作(),第一个用于呈现页面,第二个用于执行按下按钮后应执行的业务

就你而言:

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()
XML
注释
…)

与您正在使用的方法最相似的是
validate()
方法,该方法(为了防止前面解释的问题再次出现,只能应用于某些方法,而不是应用于类的所有操作方法,使用
validatexx()
@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;
}
只需使用两个操作(),第一个用于呈现页面,第二个用于执行按下按钮后应执行的业务

就你而言:

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()
XML
注释
…)

与您正在使用的方法最相似的是
validate()
方法,该方法(为了防止前面解释的问题再次出现,只能应用于某些方法,而不是应用于类的所有操作方法,使用
validatexx()
@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;
}

@优素福,你介意投票决定答案(如果你喜欢)并接受它(如果它有效)吗?谢谢我知道你从来没有在11个问题之后投票或接受过答案:|这背后有什么原因吗?要投票,按答案左上角的向上箭头;要接受,按白色V键,将其变为绿色。@Yousuf,你介意投票(如果你喜欢)并接受(如果它有效)吗?谢谢我知道你从来没有在11个问题之后投票或接受过答案:|这背后有什么原因吗?要投票,请按答案左上角的向上箭头;要接受,请按白色V将其变为绿色。