1

非常直截了当的问题,但我在任何地方都找不到。我正在使用 WicketStuff 的 TinyMCE 在我的应用程序中制作富文本编辑器,但在任何地方都找不到如何从文本区域获取输入。为简洁起见,以下是我正在使用的代码的简化版本。

    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);

使用它,我希望通常的方式可以简单地使用我的字符串“输入”,因为它被设置为模型。由于模型未更新,这始终导致 null 。

我尝试使用自动保存插件,以防它期望单击保存按钮(这也不会更新模型),但两者都不起作用。为了获得用户的输入,我唯一能做的就是添加一个带有新模型的 HiddenField,然后进行 JavaScript 调用,例如

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

但这导致了尝试在所需位置调用 JS 并使其正常工作的其他问题。我觉得这无论如何都不是必需的,因为肯定有人已经实现了一种方法来获取正在使用的文本区域的内容。

任何帮助将不胜感激。

4

2 回答 2

2

感谢Nevermind Solutions 的一篇博文,更新模型的方法是将以下 JavaScript 添加到表单的提交按钮:

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

我的文本区域在面板内,按钮在面板外,因此它不能直接为我工作。诀窍是将 JavaScript 调用添加到按钮的 onSubmit,将逻辑移动到 onAfterSubmit,并制作按钮 MultiPart,以便它可以在执行与模型关联的其他逻辑之前调用保存触发器。

希望这可能会在未来对其他人有所帮助。

于 2014-09-19T15:29:34.150 回答
1

您必须向提交按钮添加一个修饰符,以便模型可以更新。

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

这里查看更多信息

于 2016-02-01T13:01:36.227 回答