Java 如何验证Struts2中的下拉列表
我正在编写一个action类,希望在其中使用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 {
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将其变为绿色。