[jboss-user] [JBoss Seam] - help with this entity been updated implicitly
gsegura
do-not-reply at jboss.com
Thu Dec 6 15:42:08 EST 2007
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
More information about the jboss-user
mailing list