我找到了解决我的问题的方法。我创建了自己的验证器。哪个处理两件事。
- 单击“返回”按钮时忽略验证
通过提供向导索引(静态)和页面索引(按页面设置)来管理具有相同操作的多个系列表单。示例代码:
/**
- 类用于检查强制字符串。
- 该类可用于页面流
- 与同一个动作类交谈
*/
公共类 MandatoryStringFieldValidator 扩展 FieldValidatorSupport {
// Holds the Current Page Index, value picked from JSP(Front End)
private String pageIndex = "0";
// Holds the Wizard Page which is set in the xxx-validation.xml
private String wizardPage = "0";
// Holds a Value by which I can identify if the action is back button click
//If true validation is ignored. This is also taken from the JSP(Front End)
private String backClicked;
public String getBackClicked() {
return backClicked;
}
public void setBackClicked(String backClicked) {
this.backClicked = backClicked;
}
public String getPageIndex() {
return pageIndex;
}
public void setPageIndex(String pageIndex) {
this.pageIndex = pageIndex;
}
public String getWizardPage() {
return wizardPage;
}
public void setWizardPage(String wizardPage) {
this.wizardPage = wizardPage;
}
@Override
public void validate(Object object) throws ValidationException {
final String fieldName = getFieldName();
final Object value = getFieldValue(fieldName, object);
if(!"0".equals(pageIndex)){
Integer pageIndexValue = (Integer) getFieldValue(pageIndex, object);
if (pageIndexValue != null) {
backClicked = (String) getFieldValue(backClicked, object);
if(StringUtils.isNotBlank(backClicked) && Boolean.valueOf(backClicked)){
pageIndexValue = pageIndexValue - 1;
}
pageIndex = String.valueOf(pageIndexValue);
}
}
if(wizardPage.equals(pageIndex)) {
if (!(value instanceof String)) {
addFieldError(fieldName, object);
return;
}
String strValue = (String) value;
if (StringUtils.isBlank(strValue)) {
addFieldError(fieldName, object);
}
}
}
}
验证.xml
<validators>
<validator name="requiredStringValidator"
class="com.client.validation.MandatoryStringFieldValidator"/>
</validators>
最后在 -validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="serviceMot.driverName">
<field-validator type="requiredStringValidator" short-circuit="true">
<param name="pageIndex">pageIndex</param>
<param name="backClicked">backClicked</param>
<param name="wizardPage">1</param>
<message>${getText('page1.mandatoryName')}</message>
</field-validator>
</validators>
请注意:我已经删除了一些代码,因为它具有生产代码并且也更改了文件中的名称。