Хотите создать связыватель вида для поля в классе (дао). поле принимает JSON как текст - PullRequest
0 голосов
/ 28 апреля 2018
public class JsonObject {
    private HashMap<String, JsonObject> jsonObjects;
    private List<JsonObject> jsonArray;
    private Integer jsonNumber;
    private String jsonString;
    private Boolean jsonBoolean;
    private Float jsonFloat;
    private String original;

    private VIEW view;

    @SuppressWarnings("unchecked")
    public JsonObject(String json) {
        //... json parser to class field  
    }
    <VIEW> void name(VIEW v) {
        this.view=v;
    }
    // ... getter and setters
}

Используйте Vaadin FW как инфраструктуру пользовательского интерфейса. Я не могу объявить так:

    public class Exm extends FormLayout {

        public Exm() {
            String json = "{some json ....}";
            JsonObject<TextField> js = new JsonObject(json);

            js.viewBainder(TextField::getValue,TextField::setValue)
            .viewCaption(TextField::setCaption,TextField::getCaption)
            .viewValueChangeEvents(TextField::addValueChangeListener);

            addComponent(js.getView());
        }
    }

Могу ли я сделать это без универсального класса, только с универсальным методом?

Как я могу связать VIEW и абстрактные методы в классе?

Pls. приведи простой пример.

P.S. Я младший в Java, пожалуйста. не думаю, что в жесткой Оби мне! Thanx.

1 Ответ

0 голосов
/ 29 апреля 2018

Документацию по привязке данных с формами в Vaadin можно найти здесь:

https://vaadin.com/docs/v8/framework/datamodel/datamodel-forms.html

Концепция заключается в том, что в Vaadin существует класс Binder, который может связывать компоненты поля Vaadin (которые реализуют HasValue) с POJO (то есть объектами Java, имеющими методы получения и установки для свойств). Связывание данных Vaadin 8 проще всего использовать с синтаксисом Java8.

Вторая часть вашего вопроса состоит в том, как десериализовать JSON в POJO и обратно в строки, и, основываясь на вашем вопросе, я не понял, какую библиотеку вы используете, их много, и детали различаются в зависимости от того, что вы используете. Что бы вы ни использовали, вы должны создавать java-объект с помощью методов getName () и setName (..) (имя теперь является одним из свойств в JSON).

Как преобразовать строку в JSONObject в Java

Обычно нам нравится вызывать десериализованную версию объекта JSON DTO (= объект передачи данных), поскольку он используется только внутри приложения. Так что, если это называется, например, PersonDTO

TextField nameField = new TextField();

// Shorthand for cases without extra configuration
binder.bind(nameField, PersonDTO::getName, PersonDTO::setName);
...