You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DateFieldBinderCrossValidation.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.vaadin.tests.components.datefield;
  2. import java.time.LocalDate;
  3. import java.util.Objects;
  4. import com.gargoylesoftware.htmlunit.javascript.host.html.FormField;
  5. import com.vaadin.annotations.Widgetset;
  6. import com.vaadin.data.Binder;
  7. import com.vaadin.server.VaadinRequest;
  8. import com.vaadin.shared.ui.ErrorLevel;
  9. import com.vaadin.tests.components.AbstractTestUI;
  10. import com.vaadin.tests.components.AbstractTestUIWithLog;
  11. import com.vaadin.ui.Button;
  12. import com.vaadin.ui.DateField;
  13. import com.vaadin.ui.HorizontalLayout;
  14. import com.vaadin.ui.Label;
  15. import com.vaadin.ui.TextField;
  16. @Widgetset("com.vaadin.DefaultWidgetSet")
  17. public class DateFieldBinderCrossValidation extends AbstractTestUI {
  18. @Override
  19. protected void setup(VaadinRequest request) {
  20. HorizontalLayout horizontalLayout = new HorizontalLayout();
  21. Label label = new Label();
  22. label.setId("status");
  23. Binder<FromToModel> fromToModelBinder = new Binder<>();
  24. DateField fromField = new DateField();
  25. fromField.setId("from-field");
  26. fromField.setDateFormat("yyyy/MM/dd");
  27. final Binder.Binding<FromToModel, LocalDate> fromBinding = fromToModelBinder
  28. .forField(fromField).asRequired()
  29. .bind(FromToModel::getFromDate, FromToModel::setFromDate);
  30. DateField toField = new DateField();
  31. toField.setId("to-field");
  32. toField.setDateFormat("yyyy/MM/dd");
  33. final Binder.Binding<FromToModel, LocalDate> toBinding = fromToModelBinder
  34. .forField(toField).asRequired()
  35. .bind(FromToModel::getToDate, FromToModel::setToDate);
  36. fromField.addValueChangeListener(e -> {
  37. toField.setRangeStart(e.getValue());
  38. if (toField.getValue() != null) {
  39. toBinding.validate();
  40. }
  41. label.setValue("from field is " + fromField.getErrorMessage()
  42. + ". To field is " + toField.getErrorMessage());
  43. });
  44. toField.addValueChangeListener(e -> {
  45. fromField.setRangeEnd(e.getValue());
  46. if (fromField.getValue() != null) {
  47. fromBinding.validate();
  48. }
  49. label.setValue("from field is " + fromField.getErrorMessage()
  50. + ". To field is " + toField.getErrorMessage());
  51. });
  52. horizontalLayout.addComponents(fromField, toField, label);
  53. addComponents(horizontalLayout);
  54. }
  55. private static class FromToModel {
  56. private LocalDate fromDate;
  57. private LocalDate toDate;
  58. public LocalDate getFromDate() {
  59. return fromDate;
  60. }
  61. public void setFromDate(LocalDate fromDate) {
  62. this.fromDate = fromDate;
  63. }
  64. public LocalDate getToDate() {
  65. return toDate;
  66. }
  67. public void setToDate(LocalDate toDate) {
  68. this.toDate = toDate;
  69. }
  70. @Override
  71. public boolean equals(Object o) {
  72. if (this == o)
  73. return true;
  74. if (!(o instanceof FromToModel))
  75. return false;
  76. FromToModel that = (FromToModel) o;
  77. return Objects.equals(getFromDate(), that.getFromDate())
  78. && Objects.equals(getToDate(), that.getToDate());
  79. }
  80. @Override
  81. public int hashCode() {
  82. return Objects.hash(getFromDate(), getToDate());
  83. }
  84. }
  85. }