我有一些方案可以忽略某些页面的应用程序上的Struts验证。 我有一个页面流。用户完成一页并单击"下一步"按钮进入另一页。 单击Next时,会对必需元素进行验证检查,并且它们正常工作。
在同一页面中有"返回"按钮,单击该按钮用户将导航到上一页。 即使未输入必填元素,用户也应允许转到上一页。 但在我的情况下,强制检查正在停止。
我正在使用Struts Validation Frame工作。
我有AdminWorkFlow-Validation.xml
个文件,其中包含页面所需的所有验证。
如何进行验证检查单击“后退”按钮时忽略。
使用Struts 2.0.11和
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
答案 0 :(得分:1)
我找到了解决问题的方法。我创建了自己的验证器。 哪个处理两件事。
通过提供向导索引(静态)和页面索引(按页面设置)来管理具有相同操作的多个表单系列。 示例代码:
/ **
* /
公共类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);
}
}
}
}
<强>的validation.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>
请注意:我已经删除了一些代码,因为它有生产代码并且也改变了文件中的名称。