Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript f:ajax上的onevent导致模型无法更新_Javascript_Jquery_Ajax_Jsf 2_Tinymce - Fatal编程技术网

Javascript f:ajax上的onevent导致模型无法更新

Javascript f:ajax上的onevent导致模型无法更新,javascript,jquery,ajax,jsf-2,tinymce,Javascript,Jquery,Ajax,Jsf 2,Tinymce,我在一个网站上添加了TinyMCE(JSF-2、Tomcat7、Mojarra 2.1.6)。当用户单击“刷新”按钮时,编辑器中的html文本将被解析并打印在页面的其他位置 在Ajax请求之前,我必须关闭TinyMCE(否则我将使用两个编辑器)。TinyMCE文档中也建议这样做 因此,我在按钮中添加了一个f:ajax事件: <h:commandButton value="#{msg['rt.refresh']}" action="#{updateTextAction.execute}" o

我在一个网站上添加了TinyMCE(JSF-2、Tomcat7、Mojarra 2.1.6)。当用户单击“刷新”按钮时,编辑器中的html文本将被解析并打印在页面的其他位置

在Ajax请求之前,我必须关闭TinyMCE(否则我将使用两个编辑器)。TinyMCE文档中也建议这样做

因此,我在按钮中添加了一个f:ajax事件:

<h:commandButton value="#{msg['rt.refresh']}" action="#{updateTextAction.execute}" onclick="cleanupRte();">
<f:ajax event="action" execute="@this" render="@all" onevent="disposeTinyMce" />
</h:commandButton>
以及OneEvent方法:

function disposeTinyMce(e) {

    if(e.status == 'begin') {
        tinyMCE.triggerSave();

        var elem = document.getElementById("mainForm:rteExtAdr:input");
        alert(elem.value);

        tinyMCE.execCommand('mceRemoveControl', false, 'mainForm:rteExtAdr:input');
    }
    if(e.status == 'complete') {
    }
    if(e.status == 'success') { 
        tinyMCE.execCommand('mceAddControl', false, 'mainForm:rteExtAdr:input');
    }

    return true;
}
这将禁用编辑器并将其添加回页面。这很好用

问题在于,尽管警报显示正确的值,但模型没有使用文本字段中的值进行更新。该请求还包含文本字段中的“旧”值

是否有什么东西会阻止ajax调用查看当前表单值? 还是在执行onevent函数之前读取值

如果我完全删除f:ajax标记,那么模型就会更新,但是在响应之后,TinyMce编辑器会出现重复的问题

初始化调用:

tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    editor_selector : "sesamWysiwyg", 
    language : "de",
    force_br_newlines : true,
    force_p_newlines : false,
    inline_styles : false,
    forced_root_block : '', // Needed for 3.x
    plugins : "autolink,lists,style,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,searchreplace,print,paste,directionality,noneditable,visualchars,nonbreaking,xhtmlxtras,wordcount,advlist",

    formats : {
            underline : {inline : 'u', exact : true},
            strikethrough : {inline : 'del', exact : true}
    },

    theme_advanced_buttons1 : "bold,underline,strikethrough,|,cut,copy,paste,pastetext,pasteword,search,replace,|,undo,redo,|,code,removeformat,|,charmap",
        theme_advanced_buttons2 : "",
        theme_advanced_buttons3 : "",
        theme_advanced_buttons4 : "",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",

        content_css : "css/content.css",

    });
任何想法或建议都会很好


谢谢:)

这不是由
onevent
处理程序函数引起的。这是由
execute=“@This”
属性引起的。
@此
基本上意味着只执行/处理当前组件。如果要处理整个表单,包括所有包含的输入元素,则需要使用
execute=“@form”

<h:commandButton value="#{msg['rt.refresh']}" action="#{updateTextAction.execute}" onclick="cleanupRte();">
    <f:ajax execute="@form" render="@all" onevent="disposeTinyMce" />
</h:commandButton>

没有任何自定义脚本的麻烦。

Hmm,通常
triggerSave()。我不知道这里出了什么问题。你能演示一下如何使用初始的tinymce init调用(配置)吗?我几乎可以肯定这更像是一个JSF问题。alert()在triggerSave()之后显示正确的值。我将在上面添加init调用。tinymce端不是问题所在。尽管OP检查了ajax请求内容并确认提交的内容是正确的(更新的),但JSF没有更新模型。这节省了我的时间。我不知道我读了多少遍了@这篇文章而没有思考。。。我们目前使用的是ICEfaces 3.0.0,但无论如何都要对编辑器进行一些调整,因此我们决定采取强硬措施。谢谢!
<h:commandButton value="#{msg['rt.refresh']}" action="#{updateTextAction.execute}" onclick="cleanupRte();">
    <f:ajax execute="@form" render="@all" onevent="disposeTinyMce" />
</h:commandButton>
<p:editor value="#{bean.text}" />
<p:commandButton value="Save" action="#{bean.save}" />