From 5f9588b8558ab22f39d9b938e2df8c6993ea4c14 Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Wed, 21 Jul 2010 12:34:15 +0000 Subject: [PATCH] #5369 DateField doesn't show selected value after invalid svn changeset:14287/svn branch:6.4 --- .../gwt/client/ui/VCalendarPanel.java | 4 +- .../gwt/client/ui/VPopupCalendar.java | 7 +++ .../ShowSelectedDateAfterInvalid.java | 57 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java b/src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java index af5411467a..285fcaddff 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java @@ -562,7 +562,9 @@ public class VCalendarPanel extends FocusableFlexTable implements */ public void updateCalendar() { updateCalendarOnly(); - if (datefield instanceof VTextualDate) { + if (datefield instanceof VPopupCalendar) { + ((VPopupCalendar) datefield).buildDate(true); + } else if (datefield instanceof VTextualDate) { ((VTextualDate) datefield).buildDate(); } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java b/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java index 5437d512c3..857e52e0b6 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java @@ -274,6 +274,13 @@ public class VPopupCalendar extends VTextualDate implements Paintable, Field, } } + protected void buildDate(boolean forceValid) { + if (forceValid) { + parsable = true; + } + buildDate(); + } + /* * (non-Javadoc) * diff --git a/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java b/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java new file mode 100644 index 0000000000..fde3d4e56b --- /dev/null +++ b/tests/src/com/vaadin/tests/components/datefield/ShowSelectedDateAfterInvalid.java @@ -0,0 +1,57 @@ +package com.vaadin.tests.components.datefield; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Form; +import com.vaadin.ui.Label; +import com.vaadin.ui.PopupDateField; + +/** + * First entering an invalid date, forcing a server roundtrip and then selecting + * a valid date from the popup in a non-immediate {@link PopupDateField} caused + * the invalid date string to continue to show. + */ +public class ShowSelectedDateAfterInvalid extends TestBase { + + @Override + protected void setup() { + final Label result = new Label(); + + final Form form = new Form(); + + PopupDateField datefield = new PopupDateField(); + datefield.setResolution(PopupDateField.RESOLUTION_DAY); + datefield.setDateFormat("dd/MM/yyyy"); + + form.addField("datefield", datefield); + + Button button = new Button("Validate"); + + button.addListener(new Button.ClickListener() { + public void buttonClick(Button.ClickEvent event) { + form.setValidationVisible(true); + if (form.isValid()) { + result.setValue("Valid!"); + } else { + result.setValue("Invalid"); + } + } + + }); + + addComponent(form); + addComponent(button); + addComponent(result); + } + + @Override + protected String getDescription() { + return "DateField doesn't show selected value after invalid and then selecting a value"; + } + + @Override + protected Integer getTicketNumber() { + return 5369; + } + +} -- 2.39.5