One thing behaved strangely after I migrated my code to Seam 2.0 CVS. Say there is code like this:
@Stateful
@Scope(CONVERSATION)
@Name("strange")
public class StrangeBacking implements Serializable, Strange{
@In EntityManager em;
private List<Something> somethings;
// getter and setter of somethings
public void action1(){
this.somethings = em.createQuery("...").getResultList();
}
public void action2(){
this.somethings = null;
}
public void action3(){
// the code does not touch the list somethings;
}
}
In the test.xhtml, there's something like this:
...
<h:commandButton action="#{strange.action1}", value="action 1", type="submit" />
...
<h:commandButton action="#{strange.action2}", value="action 2", type="submit" />
...
<s:button action="#{strange.action3}", value="action 3" />
<h:form rendered="#{strange.somethings == null}">
...
</h:form>
Prior to the migration the form was successfully rendered after clicking the buttons in this sequence: action 1 --> action 2 --> action 3. But today it does not work. I used SeamTest to see if the list somethings was really nulled out in the method action2(), the test passed. But when I looked into the seam debug page, "somethings" always happily sat in the conversation context, not nulled out!?
My current fix was like this:
public void action2(){
this.somethings.clear();
}
and in the test.xhtml:
<h:form rendered="#{empty strange.somethings}">
...
</h:form>
Then the form got rendered. But I do not understand this. Why the list somethings in the conversation context cannot be nulled out but can be cleared out? Any enlightenment would be highly appreciated!
Regards,
Ellen