我正在编写一个动作类,我希望使用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"
始终为空,而如果用户直接点击提交按钮而未选择任何状态,我希望打印此{{1}}。
答案 0 :(得分:0)
只需使用两个操作(that can be two methods of the same Java class),第一个用于呈现页面,第二个用于执行按下按钮后应执行的业务。
在你的情况下:
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;
}