验证是否更改了表格

| 我正在编写一个验证器,该验证器需要测试spring表单对象是否已更改。 在验证器中,如果未对表单进行任何更改,则应显示错误。 有弹簧机构可以做到这一点吗? 这是因为提交时进行了非常昂贵的Web服务更新调用,并且如果没有进行任何更改,则需要阻止进行Web服务调用。 干杯。
已邀请:
我不知道有任何内置的Spring机制来处理此问题。我将保存原始对象和修改后的对象的副本。我会适当地重写Form.equals()方法(如果所有字段都是基元/字符串,则可能委派给org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals())并使用Form.equals()检查表格是否已更改。 我在这里看到了两个截然不同的响应,这暗示着重写\“ hashCode \”方法是一个不错的方法。 hashCode()的约定不保证不平等,这可能会导致问题。确保也重写equals()。当然,发生哈希冲突的可能性是万亿分之一,但是当您尝试检查两个对象是否不同时,仅依靠hashCode()的设计是很糟糕的。
覆盖您的hashCode()函数,以确保在表单值更改时返回不同的值。保存该函数的返回值并测试是否已更改。
public class Person {
  String first;
  String last;
  int prevHash;
  @Override
  public int hashCode() {
    // does not include the value of currHash
    String stringHash = String.format(\"%1$-29s%2$-29s\", first,last);
    return stringHash.hashCode();
  }
}

public class PersonValidator  implements Validator {
  public void validate(Object obj, Errors e) {
    Person p = (Person) obj;
    if (p.hashCode() == p.getPrevHash()) {
      e.reject(\"person\", \"unchanged\");
    } 
  }
  ...
}
我认为没有Spring提供的验证测试来检查表单支持对象是否已更改 请注意,在允许用户提交表单之前,您可以在客户端执行其他测试。
根据客户端检查表单是否更改,尝试其他方法。 启动表单用户界面/ jQuery:
   $(document).ready(function() {
        var isFormChanged = false;
        var isConfirmed = false;
        $(\"form :input\").change(function() {
            console.log($(this).attr(\'name\'));
            isFormChanged = true;
        });

        $(\"#storeForm\").submit(function(event) {
            if (!isConfirmed) {
                event.preventDefault();
            }
            if (isFormChanged) {
                console.log(\"Form has changed\");
                $(\":submit\").addClass(\"btn-danger\");
                $(\":submit\").text(\"Confirm\");
                isConfirmed = true;
            }
        });
    });
您还可以在表单中设置隐藏字段,以将信息发送回Spring以在服务器端再次检查所有这些信息。这比将所有表单数据回退到服务器以检查每次是否有更改有更快的速度。

要回复问题请先登录注册