123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- ---
- title: Creating Your Own Converter For String
- order: 5
- layout: page
- ---
-
- [[creating-your-own-converter-for-string-mytype-conversion]]
- = Creating your own converter for String - MyType conversion
-
- If you have custom types that you want to represent using the built in
- field components, you can easily create your own converter to take care
- of converting between your own type and the native data type of the
- field.
-
- A sample custom type, in this case a Name object with separate fields
- for first and last name.
-
- [source,java]
- ....
- public class Name {
- private String firstName;
- private String lastName;
-
- public Name(String firstName, String lastName) {
- this.firstName = firstName;
- this.lastName = lastName;
- }
-
- public String getFirstName() {
- return firstName;
- }
-
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
-
- public String getLastName() {
- return lastName;
- }
-
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- }
- ....
-
- A converter for the name, assuming the parts are separated with a space
- and that there are only two parts of a name.
-
- [source,java]
- ....
- public class StringToNameConverter implements Converter<String, Name> {
- public Name convertToModel(String text, Locale locale)
- throws ConversionException {
- if (text == null) {
- return null;
- }
- String[] parts = text.split(" ");
- if (parts.length != 2) {
- throw new ConversionException("Can not convert text to a name: " + text);
- }
- return new Name(parts[0], parts[1]);
- }
-
- public String convertToPresentation(Name name, Locale locale)
- throws ConversionException {
- if (name == null) {
- return null;
- } else {
- return name.getFirstName() + " " + name.getLastName();
- }
- }
-
- public Class<Name> getModelType() {
- return Name.class;
- }
-
- public Class<String> getPresentationType() {
- return String.class;
- }
- }
- ....
-
- Hooking up the Name type and its Converter to a TextField can then be
- done like this
-
- [source,java]
- ....
- Name name = new Name("Rudolph", "Reindeer");
-
- final TextField textField = new TextField("Name");
- textField.setConverter(new StringToNameConverter());
- textField.setConvertedValue(name);
-
- addComponent(textField);
- addComponent(new Button("Submit value", new ClickListener() {
- public void buttonClick(ClickEvent event) {
- try {
- Name name = (Name) textField.getConvertedValue();
- Notification.show(
- "First name: " + name.getFirstName() +
- "<br />Last name: " + name.getLastName());
- } catch (ConversionException e) {
- Notification.show(e.getCause().getMessage());
- }
- }
- }));
- ....
|