[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