Jsf Richfaces 4.2和TinyMCE
我正在尝试使用RichFaces4.2和基于3.5.11版的我自己定制的TinyMCE富文本编辑器 编辑器的安装与官方教程一样。它可以工作,并且编辑器可以应用于任何文本区域 我的问题是在ajax提交之后,当表单重新呈现时,TinyMCE实例将丢失,不再应用Jsf Richfaces 4.2和TinyMCE,jsf,richfaces,tinymce-3,Jsf,Richfaces,Tinymce 3,我正在尝试使用RichFaces4.2和基于3.5.11版的我自己定制的TinyMCE富文本编辑器 编辑器的安装与官方教程一样。它可以工作,并且编辑器可以应用于任何文本区域 我的问题是在ajax提交之后,当表单重新呈现时,TinyMCE实例将丢失,不再应用 有没有办法解决这个问题,在每个ajax提交或任何其他方法上重新应用TinyMCE?我做了一个变通方法,允许TinyMCE与Richfaces ajax操作和渲染交互,因此我将回答我自己的问题,尽管我相信这不是最好的答案 以下是我的解决方案:
有没有办法解决这个问题,在每个ajax提交或任何其他方法上重新应用TinyMCE?我做了一个变通方法,允许TinyMCE与Richfaces ajax操作和渲染交互,因此我将回答我自己的问题,尽管我相信这不是最好的答案 以下是我的解决方案: 将TinyMCE文件夹复制到我的WebContent/js文件夹,包括tiny.js,它是一个init文件外部文件可选 该文件包含tinyMCE init config和JSF2 javascript,它们连接tinyMCE和render操作 下面是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个文本区域/编辑器,并且需要像问题列表一样进行编辑。同一页面上的4个编辑器加载时间较慢,而以前的rich:editor/ckeditor会注意到性能损失
嗯,需要在保存按钮中添加一点javascript,如下所示:
<a4j:commandButton onclick="tinyMCE.triggerSave();" render="some_panel" value="Any render"></a4j:commandButton>
triggerSave将编辑器上的值html传输到h:inputTextarea,以便JSF可以获取这些值并将其发送到后端