Как получить ввод пользователя от WicketStuff's TinyMCE

Довольно простой вопрос, но я нигде не могу его найти. Я использую WicketStuff TinyMCE, чтобы сделать Rich Text Editor в своем приложении, и не могу найти где-нибудь, как получить ввод из текстовой области. Для краткости ниже приведен упрощенный вариант кода, который я использую.

    private String input;
    ...

    TinyMCESettings settings = new TinyMCESettings(TinyMCESettings.Theme.simple);

    TextArea<String> textArea = new TextArea<String>("editor", new PropertyModel<String>(this, "input"));
    textArea.add(new TinyMceBehavior(settings));

    form.add(textArea);

Используя это, я ожидал бы, что обычным способом будет просто использовать мой String 'input', так как он установлен в качестве модели. Это всегда приводит к нулю, так как модель не обновляется.

Я попытался использовать плагин автосохранения на тот случай, если он ожидал нажатия кнопки сохранения (что тоже не обновляет модель), и ни один из них не сработал. Единственное, что я смог сделать, чтобы получить ввод от пользователя, - это добавить HiddenField с новой моделью и сделать такой вызов JavaScript, как

document.getElementById('hiddenField').value = tinyMCE.get('editor').getContent();

но это привело к другим проблемам с попыткой вызвать JS в нужном месте и заставить его работать должным образом. Я чувствую, что это не должно быть необходимо в любом случае, так как наверняка кто-то должен был реализовать метод для получения содержимого используемой текстовой области.

Любая помощь будет принята с благодарностью.

2 ответа

Решение

Благодаря сообщению в блоге Nevermind Solutions, способ обновить модель - добавить следующий JavaScript к кнопке отправки формы:

onclick="tinyMCE.triggerSave(true,true);"

Моя текстовая область находится внутри панели с кнопкой снаружи панели, поэтому она не работает для меня напрямую. Хитрость заключалась в том, чтобы добавить вызов JavaScript к onSubmit кнопки, переместить логику в onAfterSubmit и сделать кнопку MultiPart так, чтобы она могла вызывать триггер сохранения перед выполнением другой логики, связанной с моделью.

Надеюсь, что это может помочь другим в будущем.

Вы должны добавить модификатор к кнопке отправки, чтобы модель могла обновляться.

AjaxButton btnSubmit = new AjaxButton("btnSubmit", new Model()) {
    @Override
    public void onSubmit(AjaxRequestTarget target, Form<?> form) {
        doSomething();
    }
};
btnSubmit.add(new TinyMceAjaxSubmitModifier());

Посмотрите здесь для получения дополнительной информации

Другие вопросы по тегам