Explorar el Código

Set internal value instead of converted value when locale has changed. (#14400)

Change-Id: I2440f6471b8bbb016497bf59cffd023b013460dd
tags/7.4.0.beta1
Sauli Tähkäpää hace 9 años
padre
commit
69df69f494

+ 2
- 1
server/src/com/vaadin/ui/AbstractField.java Ver fichero

@@ -1402,7 +1402,8 @@ public abstract class AbstractField<T> extends AbstractComponent implements
valueLocale);
T newinternalValue = convertFromModel(convertedValue);
if (!SharedUtil.equals(getInternalValue(), newinternalValue)) {
setConvertedValue(convertedValue);
setInternalValue(newinternalValue);
fireValueChange(false);
}
}
}

+ 56
- 0
uitest/src/com/vaadin/tests/components/textfield/LocaleChangeOnReadOnlyField.java Ver fichero

@@ -0,0 +1,56 @@
package com.vaadin.tests.components.textfield;


import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.TextField;

import java.math.BigDecimal;
import java.util.Locale;

public class LocaleChangeOnReadOnlyField extends AbstractTestUI {

@Override
protected void setup(VaadinRequest request) {
final TextField textField = getReadOnlyTextField();
addComponent(textField);

Button changeLocaleButton = addLocaleChangeButton(textField);
addComponent(changeLocaleButton);
}

private TextField getReadOnlyTextField() {
final TextField textField = new TextField();

textField.setConverter(BigDecimal.class);
textField.setLocale(Locale.US);
textField.setValue("1024000");
textField.setReadOnly(true);

return textField;
}

private Button addLocaleChangeButton(final TextField textField) {
Button changeLocaleButton = new Button();
changeLocaleButton.setCaption("Change Locale");
changeLocaleButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent event) {
textField.setLocale(Locale.GERMANY);
}
});

return changeLocaleButton;
}

@Override
protected String getTestDescription() {
return "Read-only fields throw exception when setting converted value in localeMightHaveChanged()";
}

@Override
protected Integer getTicketNumber() {
return 14400;
}
}

+ 24
- 0
uitest/src/com/vaadin/tests/components/textfield/LocaleChangeOnReadOnlyFieldTest.java Ver fichero

@@ -0,0 +1,24 @@
package com.vaadin.tests.components.textfield;

import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.TextFieldElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
import org.junit.Test;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class LocaleChangeOnReadOnlyFieldTest extends MultiBrowserTest {

@Test
public void localeIsChangedOnReadOnlyField() {
openTestURL();

TextFieldElement textField = $(TextFieldElement.class).first();
assertThat(textField.getValue(), is("1,024,000"));

$(ButtonElement.class).caption("Change Locale").first().click();
assertThat(textField.getValue(), is("1.024.000"));
}

}

Cargando…
Cancelar
Guardar