ajax - 第二次提交时,TinyMCE 在 bean 中的值(使用 jsf.ajax.addOnEvent)

标签 ajax jsf jsf-2 tinymce

我已经建立了一个基本的测试用例,在其中我经历了一些(对我来说)奇怪的行为。使用下面的设置时,编辑器中键入的值仅在第二次提交时由 h:outputText 可见。例如

  • 将编辑器中的值更改为“myvalue”
  • 发送 Ajax 请求
  • h:outputText 显示“test”(bean 的默认值)
  • 将编辑器中的值更改为“另一个值”
  • 发送 Ajax 请求
  • h:outputText 显示“myvalue”
  • 发送 Ajax 请求
  • h:outputText 显示“另一个值”

注意:有一个自定义组合,如果需要请索取代码(它只是为 TinyMCE 创建文本区域并从下面加载 .js 文件)

index.xhtml

<h:body>
    <h:form>
        <mh:editor id="tinymceEditor" 
                   value="#{bean.value}" />
        <h:commandButton value="Ajax">
            <f:ajax execute="tinymceEditor" 
                    render="show" />
        </h:commandButton>
        <h:outputText id="show" value="#{bean.value}" />
    </h:form>
</h:body>

jsfhandler.js -> 包含在自定义复合 mh:editor 的 header 中

jsf.ajax.addOnEvent(function(data) {
    switch(data.status) {
        case "begin":
            tinyMCE.execCommand('mceRemoveControl',true,"tinymceEditor");
            tinyMCE.triggerSave();
            break;

        case "complete":
            tinyMCE.execCommand('mceAddControl',true,"tinymceEditor");
            break;

        case "success":            
            break;
    }
});

Bean.java

@Named
@RequestScoped
public class Bean {
    private String value = "test";
}

最佳答案

JSF ajax begin 事件来得太晚,无法考虑表单数据的更改。 ajax 请求已根据此事件之前的表单数据准备好。

实际上,顺序如下:

  • 用户输入内容(并离开字段)。
  • 在输入字段上触发 HTML DOM“更改”事件。
  • 用户点击提交按钮。
  • 提交按钮上触发 HTML DOM“点击”事件。
  • JSF 准备 ajax 请求。
  • JSF ajax“开始”事件在 ajax 请求时触发。
  • JSF 发送 ajax 请求。
  • ...

基本上,您应该在 HTML DOM“点击”事件期间执行 tinyMCE.triggerSave()

<h:commandButton ... onclick="tinyMCE.triggerSave()">

或者,更好的是,在tinyMCE文本区域的HTML DOM“更改”事件期间。

关于ajax - 第二次提交时,TinyMCE 在 bean 中的值(使用 jsf.ajax.addOnEvent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471223/

相关文章:

jsf-2 - JSF 2.0, "preRenderView"事件处理程序被调用两次

javascript - JSON.parse 给我一个错误,但 JSONLint 说它是一个有效的 json

javascript - 将对象数组从 js 传递到 rails

jsf - 单击提交按钮时,新值未在 jsf 支持 bean 中更新

html - 我的 Basic jsf 标签没有呈现到 html 标签中

java - 是否可以通过客户端漏洞查看 HttpSession 属性?

jsf-2 - 注入(inject)自定义验证器

javascript - .load() 之后的 DOM 操作

javascript - 根据 Ajax GET 请求将复选框设置为选中

javascript - Richfaces 4.x 日历组件 ondateselected 事件