我正在尝试使用Richfaces 4.2和我自己的自定义TinyMCE富文本编辑器(基于版本3.5.11)。
编辑器的安装方式与官方教程(http://www.tinymce.com/wiki.php/Installation)类似。它起作用,编辑器适用于任何textarea。
我的问题是在ajax提交之后,当表单被重新呈现时,因此TinyMCE实例丢失并且不再应用。
有没有办法处理它,在每个ajax提交或任何其他方法上重新应用TinyMCE?
答案 0 :(得分:0)
我做了一个允许TinyMCE与Richfaces ajax动作和渲染进行交互的解决方法,所以我会回答我自己的问题,尽管我认为它不是最好的答案。
这是我的解决方案:
将TinyMCE文件夹复制到我的WebContent / js文件夹,包括tiny.js这是一个init文件(外部文件可选)。
此文件包含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"
});}
JSF 2 Javascript所做的是调用tinyMCEinit()函数来清除所有textareas并重新应用它们。当你第一次打开页面时,它工作得很好,可能是一个有点繁重的DOM处理,但最终用户将不会注意到加载...除非你的页面有4个texareas /编辑器,需要像Alternatives列表一样可编辑题。同一页面上的4个编辑器加载时间较慢,前一个版本丰富:editor / ckeditor会注意到性能丢失。
嗯,需要添加一点点javascript到你的" Save"像这样的按钮:
<a4j:commandButton onclick="tinyMCE.triggerSave();" render="some_panel" value="Any render"></a4j:commandButton>
triggerSave()将编辑器上的值(html)传递给h:inputTextarea,以便JSF可以获取值并将其发送到后端。