Richfaces 4.2 and TinyMCE



我正在尝试使用Richfaces 4.2和我自己的自定义TinyMCE富文本编辑器(基于3.5.11版本)。

编辑器的安装方式与官方教程类似(http://www.tinymce.com/wiki.php/Installation)。它起作用,编辑器应用于任何文本区域。

我的问题是在ajax提交之后,当表单被重新呈现时,TinyMCE实例会丢失,不再应用。

有没有办法处理它,在每次ajax提交或任何其他方法上重新应用TinyMCE?

我做了一个变通方法,允许TinyMCE与Richfaces ajax操作和渲染交互,所以我会回答我自己的问题,尽管我认为这不是最好的答案。

这是我的解决方案:

将TinyMCE文件夹复制到我的WebContent/js文件夹中,包括tiny.js,它是一个init文件(外部文件可选)。

该文件包含tinyMCE init config和JSF2 javascript,它们连接tinyMCE和呈现操作。

这是tiny.js代码:

jsf.ajax.addOnEvent(function(data) {
switch(data.status) {
    case "begin":
        tinyMCE.triggerSave();
        break;
    case "complete":
        break;
    case "success":
        var i, t = tinyMCE.editors;
        for (i in t){
            if (t.hasOwnProperty(i)){
                t[i].remove();
            }
        }
        tinyMCEinit();
        break;
}});
function tinyMCEinit(){  
tinyMCE.init({
    language : "pt",
    mode : "textareas",
    theme : "advanced",
    mode : "textareas" 
});}

JSF2Javascript所做的是调用tinyMCEinit()函数,该函数将清除所有文本区域并重新应用。当您第一次打开页面时,它工作得很好,可能需要一些繁重的DOM处理,但最终用户不会注意到加载。。。除非您的页面有4个texareas/editor,并且需要像Alternatives Question列表一样进行编辑。同一页面上的4个编辑器加载时间较慢,并且之前的rich:editor/ceditor会注意到性能损失。

好吧,需要在你的"保存"按钮上添加一点javascript:

<a4j:commandButton onclick="tinyMCE.triggerSave();" render="some_panel" value="Any render"></a4j:commandButton>

triggerSave()将编辑器上的值(html)传输到h:inputText区域,这样JSF就可以获取这些值并将其发送到后端。

最新更新