2014-09-18 93 views
1

非常简单的问题,但我无法在任何地方找到它。我正在使用WicketStuff的TinyMCE在我的应用程序中制作富文本编辑器,并且无法在任何地方找到如何从文本区域获取输入内容。为了简洁起见,以下是我正在使用的代码的简化版本。如何从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在理想的地方,并让它正常工作。我觉得这不应该是必须的,因为肯定有人必须实施一种方法来获取正在使用的文本区域的内容。

任何帮助将不胜感激。

回答

2

多亏了blog post在没关系的解决方案,以获取更新模型的方法是将下面的JavaScript添加到表单的提交按钮:

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

我的文字区域与外部的按钮在面板内部面板,所以它不直接为我工作。诀窍是将JavaScript调用添加到按钮的onSubmit中,将逻辑移入onAfterSubmit中,并创建按钮MultiPart,以便在执行与模型相关的其他逻辑之前调用保存触发器。

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

1

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

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

有更多信息

看看 here