[seam-issues] [JBoss JIRA] (JBSEAM-4966) Factory not called after @Outjecting null value with redirect

Marek Schmidt (JIRA) jira-events at lists.jboss.org
Wed Aug 22 10:47:16 EDT 2012


    [ https://issues.jboss.org/browse/JBSEAM-4966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12713068#comment-12713068 ] 

Marek Schmidt commented on JBSEAM-4966:
---------------------------------------

The problem seems to be that Mojarra calls the equals method in SessionMap.put, which causes every bean instance to become immediately dirty in org.jboss.seam.contexts.SessionContext.flush, because of the org.jboss.seam.intercept.JavaBeanInterceptor.

During this "equals" call the outjection occurs for the BookingListAction instance, which causes the DataModel to replace our null-outjected value by the value in the "List<Booking> bookings" field. 

JavaBeanInterceptor should probably be changed to not become dirty on the equals method call, as such method should probably be without side effects (and possibly could be also changed not to run the interceptors on such methods either)
                
> Factory not called after @Outjecting null value with redirect
> -------------------------------------------------------------
>
>                 Key: JBSEAM-4966
>                 URL: https://issues.jboss.org/browse/JBSEAM-4966
>             Project: Seam 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.3.0.BETA2
>         Environment: AS 7.1.2.Final
>            Reporter: Marek Schmidt
>             Fix For: 2.3.0.CR1
>
>         Attachments: JBSEAM-4966.jpa_reproducer.patch
>
>
> The following scenario which works in Seam2.2, doesn't work in Seam2.3.0.Beta2
> {code}
> @Scope(ScopeType.SESSION)
> @Name("bookingList")
> class BookingListAction implements Serializable
> {
>   @DataModel
>   private List<Booking> bookings
>   @Factory
>   public void getBookings() {
>     // load bookings from the database
>   }
> }
> {code}
> {code}
> @Name("hotelBooking")
> public class HotelBookingAction
> {
>    @Out (required=false, scope=ScopeType.SESSION)
>    List <Booking> bookings;
>    
>    @End
>    public void confirm() {
>       // ... persist a new booking
>       // force refresh
>       bookings = null;
>    }
> }
> {code}
> {code}
>     <page view-id="/confirm.xhtml"
>           conversation-required="true">
>         <description>Confirm booking: #{booking.description}</description>
>         <navigation from-action="#{hotelBooking.confirm}">
>             <redirect view-id="/main.xhtml"/>
>         </navigation>
>     </page>
> {code}
> The getBookings factory is not called at all after the confirm action. It works correctly if I remove the redirect rule in pages.xml (by making the confirm action return "main".).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list