【发布时间】:2014-02-24 13:15:51
【问题描述】:
我正在尝试在 Struts2 (2.3.16) 中构建一个自定义验证器,如下所示。
package validator;
import actions.DiscountAction;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.ValidatorSupport;
import org.joda.time.DateTime;
public final class DiscountDateValidator extends ValidatorSupport
{
private DateTime startDate;
private DateTime endDate;
//Getters and setters.
@Override
public void validate(Object o) throws ValidationException
{
System.out.println("startDate = "+startDate);
System.out.println("endDate = "+endDate);
System.out.println((o instanceof DiscountAction));
}
}
validators.xml 文件如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
<validator name="discountDateValidator"
class="validator.DiscountDateValidator"/>
</validators>
这个验证器被用在一个动作中,如下所示。
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value="struts-default")
public final class DiscountAction extends ActionSupport implements Serializable, ValidationAware, ModelDriven<Discount>
{
@Autowired
private final transient DiscountService discountService=null;
private static final long serialVersionUID = 1L;
private Discount entity=new Discount();
@Override
public Discount getModel() {
return entity;
}
@Validations(
customValidators={
@CustomValidator(type="discountDateValidator", parameters={
@ValidationParameter(name="startDate", value="${entity.discountStartDate}"),
@ValidationParameter(name="endDate", value="${entity.discountEndDate}")},
message="xxx zzz aaa")})
@Action(value = "AddDiscount",
results = {
@Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Discount", "currentPage", "${currentPage}", "message", "${message}", "editId", "${editId}", "status", "${status}"}),
@Result(name = ActionSupport.INPUT, location = "Discount.jsp")},
interceptorRefs={@InterceptorRef(value="defaultStack", params={"params.acceptParamNames", "editId, discountId, discountCode, discountPercent, discountStartDate, discountEndDate, currentPage, rowCount, totalPages, status", "validation.validateAnnotatedMethodOnly", "true"})})
public String insert(){
return ActionSupport.SUCCESS;
}
}
DiscountDateValidator 的 validate() 方法在提交表单时被调用,但 startDate 和 endDate 的值始终为 null,o instanceof DiscountAction 的计算结果为 true。
我在这里俯瞰什么?
【问题讨论】:
标签: java validation struts2