[jboss-user] [JBoss Seam] - Stateless bean holding data?

Oberiko do-not-reply at jboss.com
Fri Jan 25 14:48:18 EST 2008


Hello,

I have two pages, edit and search.  From the edit screen, the user can go to the search screen (which also contains a list).  From the search/list screen, they can select an entity to edit.

The problem is that my list, which is part of a stateless session bean, is being retained throughout trips to the search/list page.  I.e., the previous search results are being shown after leaving and coming back.

Is this the expected behaviour?  My edit page is backed by a stateful session bean using the default conversation scope, so could that be throwing things off?  Should I just add a "clearList()" call to my links from the search page to empty it as I leave?

The code for the list page and its stateless session bean are below:

  | package org.domain.myProject.session;
  | 
  | import java.util.ArrayList;
  | import java.util.List;
  | 
  | import javax.ejb.Stateless;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | 
  | import org.domain.myProject.entity.Person;
  | import org.domain.myProject.session.local.SearchPeopleLocal;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.faces.FacesMessages;
  | import org.jboss.seam.framework.EntityQuery;
  | import org.jboss.seam.log.Log;
  | 
  | @Stateless
  | @Name("searchPeople")
  | public class SearchPeopleAction implements SearchPeopleLocal {
  | 	@Logger
  | 	private Log log;
  | 
  | 	@In
  | 	FacesMessages facesMessages;
  | 
  | 	@PersistenceContext
  | 	private EntityManager em;
  | 
  |   private List<Person> peopleList;
  | 	
  | 	@SuppressWarnings("unchecked")
  | 	public void search() {
  | 		/*
  | 		 * We are using an EntityQuery since it seems to be the quickest solution to 
  | 		 * dynamic searches.
  | 		 */
  | 		EntityQuery eq = new EntityQuery();
  | 		eq.setEntityManager(em);
  | 		eq.setEjbql("from Person p");
  | 
  | 		/*
  | 		 * The EntityQuery can have restrictions (basically the "WHERE" part of the SQL) 
  | 		 * placed on the returned results.  Since they are (I believe) called remotely
  | 		 * from this class, we have to pass the 'seamComponent.parameter' (which is 
  | 		 * the value that we'll be restricting on) in expression language
  | 		 */
  | 		List<String> restrictions = new ArrayList<String>();
  | 		restrictions.add("lower(p.name) like lower(concat('%',#{searchPeople.name},'%'))");
  | 		eq.setRestrictions(restrictions);
  | 
  | 		peopleList = eq.getResultList();
  | 		
  | 		if (peopleList.size() == 0)
  | 			facesMessages.add("Search returned no results");
  | 		
  | 		log.info("Result list size is #0", log.info("Result list size is #0", peopleList.size());
  | 	}
  | 	
  | 	// ************ The below variables (and their getters / setters) are used to make
  | 	// ************ the dynamic query
  | 	private String name;
  | 
  | 	public String getName() {
  | 		return name;
  | 	}
  | 
  | 	public void setName(String name) {
  | 		this.name = name;
  | 	}
  | 
  | 	public List<Person> getPeopleList() {
  | 		return peopleList;
  | 	}
  | 
  | 	public void setPeopleList(List<Person> peopleList) {
  | 		this.peopleList = peopleList;
  | 	}
  | }
  | 


  | <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  |                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <html xmlns="http://www.w3.org/1999/xhtml"
  | 	xmlns:s="http://jboss.com/products/seam/taglib"
  | 	xmlns:f="http://java.sun.com/jsf/core"
  | 	xmlns:h="http://java.sun.com/jsf/html">
  | 
  | <f:view>
  | 	<h:form>
  | 		<h:inputText value="#{searchPeople.name}" />
  | 		<h:commandButton action="#{searchPeople.search()}" value="Search" />
  | 
  | 		<h:dataTable value="#{searchPeople.peopleList}" var="person"
  | 			rendered="#{not empty searchPeople.peopleList}">
  | 			<h:column>
  | 				<f:facet name="header">
  | 					<h:outputText value="Id" />
  | 				</f:facet>
  | 				<s:link value="#{person.id}" view ="/editPerson.xhtml">
  | 					<f:param name ="personId" value="#{person.id}" />
  | 				</s:link>
  | 			</h:column>
  | 			<h:column>
  | 				<f:facet name="header">
  | 					<h:outputText value="Name" />
  | 				</f:facet>
  | 				<h:outputText value="#{person.name}" />
  | 			</h:column>
  | 			<h:column>
  | 				<f:facet name="header">
  | 					<h:outputText value="Number of emails" />
  | 				</f:facet>
  | 				<h:outputText value="#{person.emailAddresses.size}" />
  | 			</h:column>
  | 			<h:column>
  | 				<f:facet name="header">
  | 					<h:outputText value="Actions" />
  | 				</f:facet>
  | 			</h:column>
  | 		</h:dataTable>
  | 	</h:form>
  | 	<h:messages />
  | </f:view>
  | 
  | </html>
  | 

If it's of any use, I can also post the code for the edit page and it's stateful session bean.

Thanks!

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4123652#4123652

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4123652



More information about the jboss-user mailing list