我已经建立了一个基本的测试用例,其中我遇到了一些(对我而言)奇怪的行为。使用下面的设置时,编辑器中的输入值只能在第二次提交时由h:outputText
显示。 E.g。
注意:有一个自定义复合,如果需要请询问代码(它只是为TinyMCE创建textarea并从下面加载.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 - &gt;包含在自定义合成mh:editor
中的标题中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";
}
答案 0 :(得分:2)
为了将表单数据的更改考虑在内,JSF ajax begin
事件为时已晚。在此事件之前,已根据表单数据准备了ajax请求。
实际上,顺序如下:
基本上,您应该在HTML DOM“点击”事件期间执行tinyMCE.triggerSave()
。
<h:commandButton ... onclick="tinyMCE.triggerSave()">
或者,更好的是,在tinyMCE textarea的HTML DOM“更改”事件期间。