2014-09-26 62 views
0

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

编辑正在安装像官方教程(http://www.tinymce.com/wiki.php/Installation)。它的工作原理和编辑器适用于任何textarea。

我的问题是AJAX提交后,当形式重新呈现,所以TinyMCE的实例丢失,不再适用。

有一些方法来处理它,在每一个AJAX提交或任何其他方式重新应用TinyMCE的?

回答

0

我这样做,使TinyMCE的与Ajax4JSF的行为,并呈现交互的解决办法,所以我会回答我的问题,虽然我相信它不是最好的答案可能。

这是我的解决方案:

复印TinyMCE的文件夹到我的WebContent/JS文件夹,包括其是初始文件(外部文件可选)tiny.js。

该文件包含tinyMCE init配置和加入tinyMCE并呈现操作的JSF2 javascript。

这里是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" 
});} 

2的Javascript做什么JSF被称之为清除所有文字区域的tinyMCEinit()函数,并再次重新一切。当你打开网页的第一次,也许有点沉重的DOM处理,但最终用户将不另行通知载入中...除非你页面有4 texareas /编辑和需要可编辑喜欢的替代品清单它的工作原理很好题。同一页上的4位编辑加载速度较慢,而且以前的内容丰富:editor/ckeditor会注意到性能已经下降。

嘛,一个小小的触摸的JavaScript需要被添加到您的“保存”按钮,这样的:

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

的triggerSave()的编辑器将H传输值(HTML):inputTextarea所以JSF可以获取这些值并将其发送到后端。