[jboss-user] [JBoss Seam] - Re: Refreshing dataTable - Too many conversation
FabBoco
do-not-reply at jboss.com
Sat Jan 6 05:41:46 EST 2007
After some experiments I realized that:
1) If I start the Test page from the browser with localhost:8080/application/Test.seam and I refresh the page a new conversation is started. This is true if and only if I have a call to the TestBeam (ex <h:outputText value="#{TestManager.property}"></h:outputText> or the dataTable)
If I have not a call to the TestBean the conversation is not even started.
Let me say that if I start the Test page directly from the browser the page itself is 'detached' from the conversation, or in other words, the page can starts a conversation but it is not able to be attached to it.
2) If I start the Test page from a different page (StartTest, which does not start any conversation) and I start the TestPage calling the startPage method, I am able to refresh the page as much I like without new conversation starts. This is true even if I have <page view-id="/Test.jsp" action="#{TestManager.onListLoad}" /> in the pages.xml. Obviously the table is refreshed (it was my original problem !!).
Let me say that in this case the Test page is 'attached' to its conversation. There is a clue of the 'attachement': the URL in the browser is: localhost:8080/application/Test.seam?conversationId=number
3) Removing @Begin(join=true) from the findAll method no conversation at all is started (!!! ???)
4) The behaviour is the same if I put the bean either into the SESSION or into the CONVERSATION
Now, question is: How can I make the Test page knows that it is attached to a conversation (or better that I will be attached to a conversation) when I start it directly from the browser ?
Comments and help are welcome.
Fabrizio
Test page
| <f:view>
| <f:loadBundle basename="messages" var="msgs" />
| <h:form>
| <br>
| <t:dataTable id="cd" var="cd" preserveDataModel="false" value="#{cdList}" width="100%" ....>
|
| <h:column>
| <f:facet name="header">
| <h:outputText value="titolo" />
| </f:facet>
| <h:outputText value="#{cd.titolo}" />
| </h:column>
| </t:dataTable>
|
| <br>
| <hr>
| <h:outputText value="#{TestManager.property}"></h:outputText>
| <hr>
| <br>
| <h:commandLink action="#{TestManager.onListLoad}" value="Reload">
| </h:commandLink>
|
| </h:form>
| </f:view>
|
StartTest page
| <f:view>
| <f:loadBundle basename="messages" var="msgs" />
| <h:form>
| <h1>Start Page</h1>
| <hr>
| <br>
| <h:commandButton action="#{TestManager.startPage}" value="Start Page" />
| </h:form>
| </f:view>
|
Bean
| @Stateful
| @Name("TestManager")
| @Scope(ScopeType.SESSION)
| @Transactional
| public class TestManagerBean implements Serializable, TestManager
| {
| @PersistenceContext(type = PersistenceContextType.EXTENDED)
| private EntityManager em;
| private String property= "DISPLAY";
|
| @DataModel(value = "cdList")
| private List<Cd> cdList;
| public TestManagerBean()
| {
| }
|
| @Create
| public void create()
| {
| }
|
| @Factory("cdList")
| @Begin(join=true)
| public void findAll()
| {
| Query q = em.createQuery("select o from Cd o");
| cdList = q.getResultList();
| }
|
| @Remove
| @Destroy
| public void destroy()
| {
| }
|
| public void setProperty(String operation)
| {
| this.property = operation;
| }
|
| public String getProperty()
| {
| return property;
| }
|
| public void onListLoad()
| {
| cdList = null;
| System.out.println("reload");
| }
|
| public String startPage()
| {
| return "/Test.jsp";
| }
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3998497#3998497
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3998497
More information about the jboss-user
mailing list