I think I'd have extended ValueBoxBase instead (which already implements 
LeafValueEditor –through IsEditor and ValueBoxEditor– and handles malformed 
input by recording an error on an EditorDelegate — ValueBox could also be 
used, just make sure you set the type=date after you called the super 
constructor as it asserts type=text); use a DateTimeFormatRenderer and 
implement a Parser<Date> using your DateTimeFormat.

Alternatively, extend FocusWidget (no need for a composite here) and 
directly use the input's valueAsDate property (as a JsDate, turn it 
into/from a java.util.Date using getTime(), or 
getDate()/getMonth()/getFullYear() if you prefer).
The benefit of the ValueBoxBase and working from the text value though is 
that it works even in browsers that don't support the type=date input (e.g. 
Firefox; as they fallback to a type=text input in this case.) This is also 
why it's important to handle malformed input: you cannot count on the 
browser to sanitize the value if it doesn't support type=date, and you 
should then return 'null' rather than throwing.

In any case, to create the input, you don't need JSNI; use 
com.google.gwt.dom.client.Document.get().createElement("input") then 
setPropertyString("type", "date").
BTW, your JSNI should have used $doc rather than document.

On Tuesday, February 7, 2017 at 8:40:44 AM UTC+1, 129pierre wrote:
>
> Hi,
>
> I did it like this. Any comment/improvement ?
>
> public class DateEditor extends Composite implements LeafValueEditor<Date> 
> {
> static final DateTimeFormat html5Fmt = 
> DateTimeFormat.getFormat("yyyy-MM-dd");
>
> TextBox textBox;
>
> public DateEditor() {
> super();
> textBox = new TextBox(createDateInput());
> initWidget(textBox);
> }
>
> @Override
> public void setValue(Datevalue) {
> if (value == null)
> {
> textBox.setText("");
> }
> else
> {
> textBox.setText(html5Fmt.format(value));
> }
>
> }
>
> @Override
> public Date getValue() {
> // TODO Auto-generated method stub
> String value = textBox.getText();
> if (value == null || value.trim().length() == 0) {
> return null;
> }
> return new Date(html5Fmt.parse(value));
> }
>
> private static native InputElement createDateInput() /*-{
> var input = document.createElement("input");
> input.setAttribute("type", "date");
> return input;
> }-*/;
> } 
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit+unsubscr...@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to