[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