entitymanager flushes on ajax request
oguzyalcin.oguzhanyalcin.gazi.edu.tr Sep 25, 2009 9:16 AMHi,
I am trying to do some datetime calculations on the serverside with the help of a4j support tag. The problem is whenever I call the calculation function entitymanager tries to flush the data before executing method. And when the method is executed all the values are empty. Any idea what is going wrong here?
The entry.xhtml's source is below:
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:richfaces="http://richfaces.ajax4jsf.org/rich" xmlns:ajax="https://ajax4jsf.dev.java.net/ajax" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:s="http://jboss.com/products/seam/taglib"> <a4j:region selfRendered="true" renderRegionOnly="true"> <rich:panel id="panelPermission"> <h:panelGrid columns="2" style="cell-padding:0px;cell-spacing:0px;" rowClasses="oddRow,evenRow" id="tblRegistryNote"> <h:outputLabel value="İzin Tipi" for="cmbPermissionType" /> <h:selectOneMenu value="#{permissionHome.instance.permissionDefinition}" id="cmbPermissionType"> <s:selectItems var="_permission" value="#{permissionDefinitionList.resultList}" label="#{_permission.name}" noSelectionLabel="#{messages['selectOneMenu.NoSelection']}" /> <s:convertEntity /> </h:selectOneMenu> <h:outputLabel value="Başlangıç Tarihi" for="calStartDate" /> <rich:calendar popup="true" cellWidth="24px" cellHeight="22px" datePattern="dd.MM.yyyy" id="calStartDate" value="#{permissionHome.instance.startDate}" enableManualInput="true"> <a4j:support event="oninputchange" bypassUpdates="false" reRender="calEndDate,txtMonth,txtDay" /> </rich:calendar> <h:outputLabel value="Ay" for="txtMonth" /> <h:inputText value="#{permissionHome.instance.month}" id="txtMonth"> <a4j:support event="onchange" action="#{permissionHome.calculateEndDate}" reRender="calEndDate" /> </h:inputText> <h:outputLabel value="Gün" for="txtDay" /> <h:inputText value="#{permissionHome.instance.day}" id="txtDay"> <a4j:support event="onchange" action="#{permissionHome.calculateEndDate}" reRender="calEndDate" /> </h:inputText> <h:outputLabel value="Bitiş Tarihi" for="calEndDate" /> <rich:calendar popup="true" cellWidth="24px" cellHeight="22px" datePattern="dd.MM.yyyy" id="calEndDate" value="#{permissionHome.instance.endDate}" enableManualInput="true"> <a4j:support event="oninputchange" reRender="txtMonth,txtDay" /> </rich:calendar> </h:panelGrid> <a4j:commandButton action="#{permissionHome.persist}" value="Kaydet" rendered="#{!permissionHome.managed}" > <s:conversationId /> </a4j:commandButton> <a4j:commandButton action="#{permissionHome.update}" value="Güncelle" rendered="#{permissionHome.managed}" > <s:conversationId /> </a4j:commandButton> </rich:panel> </a4j:region> </f:view>
My backing seam object is the one below:
public class PermissionHome extends com.taykos.generated.PermissionHome { // <region-start> BIJECTION @In EntityManager entityManager; @In(create=true) RegistryChooser registryChooser; @Logger Log log; private Date endDate; public void setEndDate(Date endDate) { this.endDate = endDate; } public Date getEndDate() { return endDate; } // <region-end> // <region-start> PUBLIC METHODS public void calculateEndDate(){ log.info("Method called"); log.info("checking startdate"); if(getInstance().getStartDate()==null)return; log.info("StartDate is not null"); Calendar calendar=Calendar.getInstance(); calendar.setTime(getInstance().getStartDate()); if(getInstance().getMonth()!=null )calendar.add(Calendar.MONTH, getInstance().getMonth()); if(getInstance().getDay()>0 )calendar.add(Calendar.DATE, getInstance().getDay()); setEndDate(calendar.getTime()); log.info("Date is now" + getEndDate().toString()); calendar=null; } @Override public String persist(){ getInstance().setRegistry(registryChooser.getRegistry(); return super.persist(); } // <region-end> }