我正在编写一个操作类,我想在其中使用 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()
总是为空,因此"Please select a state"
总是显示,而我希望如果用户直接单击提交按钮而不选择任何状态,则打印它。
只需使用两个操作(可以是同一 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()
,XML
,annotations
...
与您正在使用的方法最相似的是 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;
}