[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-685) JSF postback doesn't include conversation identifier

Christian Bauer (JIRA) jira-events at jboss.com
Tue Jan 23 08:38:52 EST 2007


JSF postback doesn't include conversation identifier
----------------------------------------------------

                 Key: JBSEAM-685
                 URL: http://jira.jboss.com/jira/browse/JBSEAM-685
             Project: JBoss Seam
          Issue Type: Bug
          Components: Core, JSF
    Affects Versions: 1.1.1.GA
            Reporter: Christian Bauer


I'm at a point where I'm almost certain I have found a bug. It's difficult to reproduce and isolating it more would cost too much time.

Take a seam-gen project and create a new entity, name it 'Foo'.

Add a page called 'fooDisplay.xhtml' that shows a single Foo object:

    Name: <h:outputText value="#{currentFoo.name}"/>

    <s:link styleClass="button" value="Edit Foo" action="edit"/>

Add the outcome to pages.xml:

    <page view-id="/fooDisplay.xhtml" action="#{fooDisplay.resolveFoo}">
        <param name="fooId" value="#{fooDisplay.fooId}" converterId="javax.faces.Long"/>

        <navigation from-action="edit">
            <render view-id="/foo.xhtml"/>
        </navigation>

    </page>

So I can call this page now with /docDisplay.xhtml?fooId=123 and I will see the object. This is the job of the FooDisplay backing bean:

@Name("fooDisplay")
public class FooDisplay {

    private Long fooId;
    public Long getFooId() { return fooId; }
    public void setFooId(Long fooId) { this.fooId = fooId; }

    @In(create = true)
    private EntityManager entityManager;

    @Out(scope = ScopeType.EVENT, required = false)
    private Foo currentFoo;

    @Transactional
    public void resolveFoo() {
        entityManager.joinTransaction();
        currentFoo = entityManager.find(Foo.class, getFooId());
    }
}

The problem occurs when rendering the edit page, foo.xhtml. The processing after a click on Edit is as follows:

- Restore View /fooDisplay.xhtml
- Run FooDisplay.resolveFoo(), @Out(Event) currentFoo 
- Render Response /foo.xhtml, triggers FooHome.create(), @Begin

I've made no changes to this seam-gen produced page, only adapted the Home manager to accept not a request parameter, but injection:

@Name("fooHome")
public class FooHome extends EntityHome<Foo>
{
    @In @Out
    Foo currentFoo;
    
    @Override
    public Object getId() 
    { 
        if (currentFoo==null)
        {
            return super.getId();
        }
        else
        {
            return currentFoo.getId();
        }
    }
    
    @Override @Begin
    public void create() {
        super.create();
    }
 	
}

(I know that the injection/outjection here is not complete.)

The issue: The long-running conversation identifier is not rendered into the Edit page, and a click on "Save" or "Update" breaks. The following request does not contain a conversation identifier.

If I modify the Edit page and use s:button or s:link and not h:commandButton, the conversation identifier is rendered into the submit and everything works.



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list