From 9af9a2d1e6dcd6546d181deb6f4537d6d2a4f595 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 18 Feb 2013 19:38:28 +0200 Subject: Fixed NPE when TextField value is null (#11021) Ticket: 11021 Change-Id: If3b99333a116e6191ba3f563738e456a07173ab4 --- .../client/ui/textfield/TextFieldConnector.java | 6 ++- .../TextFieldWithDataSourceAndInputPrompt.html | 31 +++++++++++ .../TextFieldWithDataSourceAndInputPrompt.java | 63 ++++++++++++++++++++++ 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html create mode 100644 uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java diff --git a/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java b/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java index 922e8d4a32..e2ede121b6 100644 --- a/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java +++ b/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java @@ -77,8 +77,10 @@ public class TextFieldConnector extends AbstractFieldConnector implements } getWidget().setColumns(getState().columns); - final String text = getState().text; - + String text = getState().text; + if (text == null) { + text = ""; + } /* * We skip the text content update if field has been repainted, but text * has not been changed. Additional sanity check verifies there is no diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html new file mode 100644 index 0000000000..cf08d8923d --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html @@ -0,0 +1,31 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + +
New Test
open/run/com.vaadin.tests.components.textfield.TextFieldWithDataSourceAndInputPrompt?restartApplication
assertValuevaadin=runcomvaadintestscomponentstextfieldTextFieldWithDataSourceAndInputPrompt::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VTextField[0]Me is input prompt
assertValuevaadin=runcomvaadintestscomponentstextfieldTextFieldWithDataSourceAndInputPrompt::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[1]/VTextField[0]Me is input prompt
+ + diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java new file mode 100644 index 0000000000..881aa11fbb --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java @@ -0,0 +1,63 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.textfield; + +import com.vaadin.data.util.BeanItem; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.TextField; + +public class TextFieldWithDataSourceAndInputPrompt extends AbstractTestUI { + public static class Pojo { + private String string; + + public String getString() { + return string; + } + + public void setString(String string) { + this.string = string; + } + } + + @Override + protected void setup(VaadinRequest request) { + TextField textField = new TextField("TextField with null value"); + textField.setInputPrompt("Me is input prompt"); + textField.setNullRepresentation(null); + textField.setValue(null); + addComponent(textField); + + TextField textField2 = new TextField( + "TextField with null data source value"); + textField2.setInputPrompt("Me is input prompt"); + textField2.setNullRepresentation(null); + BeanItem beanItem = new BeanItem(new Pojo()); + textField2.setPropertyDataSource(beanItem.getItemProperty("string")); + addComponent(textField2); + } + + @Override + protected String getTestDescription() { + return "Input prompt should be shown when data source provides null"; + } + + @Override + protected Integer getTicketNumber() { + return 11021; + } + +} -- cgit v1.2.3