Ajax submit and transaction
petrik.mich Jun 8, 2010 2:39 PMHi,
could anybody explain how it works, when I submit a form with an a4j:commandButton?
I have following scenario:
Page with edit button which should switch between read and edit mode.
<h:form id="edu"> <a4j:region id="rd" rendered="#{not profile.editMode}"> <p><h:outputText value="#{user.name}" /></p> </a4j:region> <a4j:region id="ed" rendered="#{profile.editMode}"> <h:outputLabel for="li" value="#{messages.name}:"/> <br /> <h:inputText id="li" value="#{user.name}" required="true"> <rich:ajaxValidator event="onblur" eventsQueue="edu" ignoreDupResponses="true"/> </h:inputText> <rich:message id="lim" for="li" /> </a4j:region> <br /> <a4j:commandButton id="edi" value="#{profile.editMode ? messages.ok : messages.edit}" reRender="edu" action="#{profile.setEditMode(!profile.editMode)}"/> </h:form>
And this is backing POJO bean:
@Name("profile") @Scope(ScopeType.PAGE) public class ProfileBean implements Serializable{ @In UserQuery userQuery; @In EntityManager entityManager; private User user; @RequestParameter private String username; private boolean editMode = false; @Create public void loadUser(){ user = userQuery.getUser(username); } public User getUser(){ return this.user; } public void setEditMode(boolean editMode) { this.editMode = editMode; } public boolean isEditMode() { return editMode; } }
Everything works well but when I'm in edit mode, hit the ok
button, the changes made to user entity are not flushed to database.
I have also tried this approach:
@Begin(flushMode=FlushModeType.MANUAL) public void switchToEditMode(){ editMode = true; } @End public void switchToReadMode(){ entityManager.flush(); editMode = false; }
but it did not help.
I read documentation and understand that seam commits transaction after each request. But how it works, when there is an AJAX request?
Thanks in advance.
Michal