I am having a problem with what I would have thought would be a very simple use 
of seam.  I have a Stateful component (using ejb's) and when I put the 
component in default scope it doesn't work however in session scope it does.  
Here is the code;

  | Stateful
  | //@Scope(ScopeType.SESSION)
  | @Name("userList")
  | @Restrict("#{identity.loggedIn}")
  | public class UserListImpl implements UserList {
  |     private static final int PAGESIZE = 10;
  | 
  |     @PersistenceContext
  |     private EntityManager em;
  | 
  |     private String searchUsername;
  |     private int pageNo = 0;
  | 
  |     @DataModel
  |     private List<User> users;
  | 
  |     public void findUsers() {
  |             System.out.println("findUsers:" + pageNo);
  |             pageNo = 0;
  |             loadCurrentPage();
  |     }
  | 
  |     private void loadCurrentPage() {
  |             System.out.println("loadCurrentPage:" + pageNo);
  |             String searchPattern;
  |             if (searchUsername == null) {
  |                     searchPattern = "%";
  |             } else {
  |                     searchPattern = '%' + 
searchUsername.toLowerCase().replace('*', '%') + '%';
  |             }
  |             users = em.createQuery("from User where lower(username) like 
:searchPattern")
  |                                     .setParameter("searchPattern", 
searchPattern)
  |                                     .setMaxResults(PAGESIZE)
  |                                     .setFirstResult(pageNo * PAGESIZE)
  |                                     .getResultList();
  |     }
  | 
  |     public String getSearchUsername() {
  |             return searchUsername;
  |     }
  | 
  |     public void setSearchUsername(String searchUsername) {
  |             this.searchUsername = searchUsername;
  |     }
  |     
  |     public boolean isNextPageAvailable() {
  |             return ((users != null) && (users.size() == PAGESIZE));
  |     }
  | 
  |     public boolean isPrevPageAvailable() {
  |             return (pageNo > 0);
  |     }
  |     
  |     public void nextPage() {
  |             System.out.println("nextPage:" + pageNo);
  |             pageNo++;
  |             loadCurrentPage();
  |     }
  | 
  |     public void prevPage() {
  |             System.out.println("prevPage:" + pageNo);
  |             pageNo--;
  |             if (pageNo < 0) {
  |                     pageNo = 0;
  |             }
  |             loadCurrentPage();
  |     }       
  |     
  |     public int getPageNo() {
  |             System.out.println("getPageNo:" + pageNo);
  |             return pageNo;
  |     }
  | 
  |     public void setPageNo(int pageNo) {
  |             System.out.println("setPageNo:" + pageNo);
  |             this.pageNo = pageNo;
  |     }
  | 
  |     @Create
  |     public void create() {
  |             System.out.println("create:" + pageNo);
  |     }
  |     
  |     @Remove
  |     @Destroy
  |     public void destroy() {
  |             System.out.println("destroy:" + pageNo);
  |     }       
  | }
  | 

  | <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  |                       
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
  | <ui:composition xmlns="http://www.w3.org/1999/xhtml";
  |                 xmlns:s="http://jboss.com/products/seam/taglib";
  |                 xmlns:ui="http://java.sun.com/jsf/facelets";
  |                 xmlns:f="http://java.sun.com/jsf/core";
  |                 xmlns:h="http://java.sun.com/jsf/html";
  |                 xmlns:rich="http://richfaces.org/rich";
  |                 xmlns:a="http://richfaces.org/a4j";
  |                 template="layout/template.xhtml">
  | <ui:define name="body">
  | 
  |     <h:messages globalOnly="true" styleClass="message"/>
  | 
  |     <rich:panel>
  |     <f:facet name="header">User List</f:facet>
  |     
  |     <h:form id="searchCriteria">
  |     <h:inputHidden id="pageNo" value="#{userList.pageNo}"/>
  |     <table>
  |             <tr>
  |                     <td>
  |                             <h:outputLabel 
for="searchUsername">Username:</h:outputLabel>
  |                     </td>
  |                     <td>
  |                             <h:inputText id="searchUsername" 
value="#{userList.searchUsername}" size="15" />
  |                     </td>
  |                     <td>
  |                             <h:commandButton id="findUsers" value="Find 
Users" action="#{userList.findUsers}" reRender="searchResults"/>
  |                     </td>
  |                     <td style="width: 100%" align="center">
  |                             <a href="usermaint.seam?userid=0">
  |                             <img style="border: none" 
src="img/adduser32.gif" width="32" height="32" /><br />
  |                             Add a new User</a>
  |                     </td>
  |             </tr>
  |     </table>
  |     <rich:separator height="2" style="padding:10px 0" />
  |     
  |     <div class="section">
  |             <s:div rendered="#{users != null and users.rowCount==0}">
  |                     <table>
  |                             <tr>
  |                                     <td><img src="img/warn48.png" 
width="48" height="48" /></td>
  |                                     <td valign="middle"><span class="">No 
Users Found</span></td>
  |                             </tr>
  |                     </table>
  |             </s:div>
  |             <rich:dataTable id="users" value="#{users}" var="u" rows="20" 
rendered="#{users.rowCount>0}">
  |                     <rich:column>
  |                             <f:facet name="header">User Name</f:facet>
  |                             #{u.username}
  |                     </rich:column>
  |                     <rich:column>
  |                             <f:facet name="header">Full Name</f:facet>
  |                             #{u.fullName}
  |                     </rich:column>
  |                     <rich:column>
  |                             <f:facet name="header">Action</f:facet>
  |                             <a 
href="usermaint.seam?userid=#{u.userId}"><img style="border: none" 
src="img/edit15.gif" width="15" height="15" /></a> 
  |                             <a href="#"><img style="border: none" 
src="img/delete15.gif" width="15" height="15" /></a>
  |                     </rich:column>
  |             </rich:dataTable>
  |             <h:commandButton value="Previous Page" 
action="#{userList.prevPage}" rendered="#{userList.prevPageAvailable}"/>
  |             <h:commandButton value="Next Page" 
action="#{userList.nextPage}" rendered="#{userList.nextPageAvailable}"/>
  |     </div>
  |     
  |     </h:form>
  |     </rich:panel>    
  |     
  | </ui:define> 
  | </ui:composition>
  | 
The problem arises when I attempt to use the "Next Page" button.  With the 
component in session scope it works fine however with the component in default 
conversation scope the userList.nextPage method is never called.  Here is a 
copy of the sysout;

  | 18:29:16,234 INFO  [STDOUT] create:0
  | 18:29:16,265 INFO  [STDOUT] getPageNo:0
  | 18:29:16,281 INFO  [STDOUT] setPageNo:0
  | 18:29:16,343 INFO  [STDOUT] getPageNo:0
  | 18:29:16,359 INFO  [STDOUT] destroy:0
  | 
Has anyone got any ideas as to why this occurs?  I will be creating heaps of 
these components and I don't want to have to stick them all in the users 
session since that would be a waste of server resources.

Thanks in advance

-Mark

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

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

_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to