TinyMCE's value in bean on second submit (using jsf.ajax.addOnEvent) -
i have set basic testcase in i'm experience (to me) weird behaviour. when using setup below, typed value in editor visible h:outputtext on second submit. e.g.
- change value in editor "myvalue"
- send ajax-request
- h:outputtext shows "test" (default value bean)
- change value in editor "anothervalue"
- send ajax-request
- h:outputtext shows "myvalue"
- send ajax-request
- h:outputtext shows "anothervalue"
note: there's custom composite, please ask code if needed (it creates textarea tinymce , loads .js file below)
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 -> included on header in custom composite 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"; }
the jsf ajax begin event late in order take changes in form data account. ajax request prepared based on form data before event.
effectively, sequence follows:
- user enters input (and leaves field).
- html dom "change" event triggered on input field.
- user clicks submit button.
- html dom "click" event triggered on submit button.
- jsf prepares ajax request.
- jsf ajax "begin" event triggered on ajax request.
- jsf sends ajax request.
- ...
basically, should doing tinymce.triggersave() during html dom "click" event.
<h:commandbutton ... onclick="tinymce.triggersave()"> or, better, during html dom "change" event of tinymce textarea.
Comments
Post a Comment