Hello everybody, 
I have this use case: an item is selected from a list, the edit page for that 
item is shown, if the save action is invoked some validation is done inside 
that same method, only if everything is ok I call persist, otherwise the same 
edit page is redisplayed. 

Everything goes fine except one thing: even if validation fails (so I don't 
call persist)  the entity is been updated, why? how? where?  I reproduce some 
code:

@Scope(ScopeType.CONVERSATION)
  | @Name("courseEditor")
  | @Restrict("#{identity.loggedIn and s:hasRole('Administrator')}")
  | public class CourseEditorAction {
  | 
  |     @Begin(nested=true)
  |     public void select(Course selectedCourse) {        
  |         course = entityManager.merge(selectedCourse);        
  |     }
  |     
  |     public void save() {
  |         if(course.getStartDate()!=null && course.getFinishDate()!=null &&
  |                 course.getStartDate().compareTo(course.getFinishDate())>=0) 
{
  |             facesMessages.addToControl("finishDate","must be posterior to 
start date") ;
  |             ok = false ;            
  |         }
  |         else {            
  |             sede = entityManager.merge(sede) ;
  |             if(course.getId()==null)
  |                             //my way to update parent collection of courses 
(only if course is new) 
  |                 sede.getCourses().add(course) ; 
  |             entityManager.persist(course);
  |             facesMessages.add("Course saved successfully");                
  |                     //I only finish conversation in case the edition use 
case finish
  |             Conversation.instance().end() ;
  |             ok = true;
  |         }
  |     }
  |     
  |     @End
  |     public void cancel() {}
  |     
  |     public boolean isOk() {
  |         return ok ;
  |     }
  | }

<page view-id="/admin/courseEditor.xhtml">
  |         <navigation from-action="#{courseEditor.save}">
  |             <rule if="#{courseEditor.ok}">
  |                 <redirect view-id="/admin/sedeEditor.xhtml"/>
  |             </rule>
  |             <rule if="#{not courseEditor.ok}">
  |                 <redirect view-id="/admin/courseEditor.xhtml"/>
  |             </rule>
  |         </navigation>
  |         <navigation from-action="#{courseEditor.cancel}">
  |             <redirect view-id="/admin/sedeEditor.xhtml"/>
  |         </navigation>
  |                 
  |     </page>

if finish date value is before start date, the page is redisplayed, the message 
describing the incorrect input is shown, but at that moment the course already 
has been updated :S

I though maybe select method was been called every time the page is redisplayed 
and since there is a merge that was causing the update, but no:  select method 
is called (makes sense) only first time. 
so the updating is invoked somewhere else...  
any help is much appreciated

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4110994#4110994

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4110994
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to