commandLink not initially executing action when clicked
sjmenden Aug 3, 2006 1:43 PMI have a page which allows me to search for registered users to a site.
The part of the page I have a problem with is as follows, page: showUsers.jsp which makes calls to an EJB3 called userFinder
<h:commandLink value="S" action="#{userFinder.findFirstPage}" styleClass="alpha_list"> <f:param name="start" value="S"/> </h:commandLink>
Here is the problem. When I initially hit the showUsers.jsp page and click on the link defined above, the page refreshes but nothing happens on the page or in the console output.
HOWEVER, if I first search for a user (code not shown) THEN I click the link above, then it works and shows me all users starting with the letter S.
It seems like something contexual, but I don't understand why the #{userFinder.findFirstPage} action isn't working on the commandLink before I search for something.
@Name("userFinder") @Stateful @Scope(ScopeType.SESSION) public class UserFinderBean implements UserFinder { private User example = new User(); public User getExample() { return example; } private String[] searchColumns; public String[] getSearchColumns() { return searchColumns; } public void setSearchColumns(String[] searchColumns) { this.searchColumns = searchColumns; } private SelectItem[] searchColumnItems = new SelectItem[] { new SelectItem("username", "Username"), new SelectItem("firstName", "First"), new SelectItem("lastName", "Last"), new SelectItem("company", "Company"), new SelectItem("email", "Email") }; public SelectItem[] getSearchColumnItems() { return searchColumnItems; } private int pageNumber = 0; private int pageSize = 15; public void setPageSize(int size) { pageSize = size; } public int getPageSize() { return pageSize; } public boolean isPreviousPage() { return userList!=null && pageNumber>0; } public boolean isNextPage() { return userList!=null && userList.size()==pageSize; } @Logger private Log log; @DataModel private List<User> userList; @DataModelSelection private User selectedUser; @PersistenceContext private EntityManager entityManager; private void executeQuery() { Map<String, Object> parameters = new HashMap<String, Object>(); StringBuffer queryString = new StringBuffer(); log.info("searchColumns: " + Arrays.asList(searchColumns)); //*******************************************************// // Handle case when a user clicks on a letter //*******************************************************// if(start != null && !start.equals("")) { queryString.append(" or user.username" + " like :value or user.username like :valuetwo "); parameters.put("value", start + "%"); parameters.put("valuetwo", start.toLowerCase() + "%"); } // if(example.getUsername() != null ) { // if(example.getUsername().contains("%")) { // queryString.append(" and user.username like :username"); // } else { // queryString.append(" and user.username = :username"); // } // parameters.put( "username", example.getUsername() ); // } if(example.getUsername() != null ) { int x = 0; for(String searchColumn : searchColumns) { if(example.getUsername().contains("%")) { queryString.append(" or user." + searchColumn + " like :" + searchColumn); } else { queryString.append(" or user." + searchColumn + " = :" + searchColumn); } parameters.put( searchColumn, example.getUsername() ); x++; } } if(queryString.length() == 0) { queryString.append("select user from User user"); } else { queryString.delete(0, 3).insert(0, "select user from User user where "); } if(order!=null) { queryString.append(" order by user.").append(order); if (descending) queryString.append(" desc"); } // Properties of a JavaBean can be bound to named query parameters: // // Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size"); // q.setProperties(fooBean); // fooBean has getName() and getSize() // List foos = q.list(); log.info("example.username: " + example.getUsername() + " queryString: \n\n" + queryString + "\n\n"); Query query = entityManager.createQuery(queryString.toString()); for (Entry <String, Object> param : parameters.entrySet()) { query.setParameter( param.getKey(), param.getValue() ); } userList = (List<User>) query.setMaxResults(pageSize) .setFirstResult(pageSize*pageNumber) .getResultList(); } public String findFirstPage() { log.info("Find First Page"); pageNumber=0; executeQuery(); return null; } public String findNextPage() { pageNumber++; executeQuery(); return null; } public String findPreviousPage() { pageNumber--; executeQuery(); return null; } public void refresh() { if (userList!=null) executeQuery(); } public String clear() { userList=null; example = new User(); return null; } public User getSelection() { return entityManager.merge( selectedUser ); } @Destroy @Remove public void destroy() {} private String order; private boolean descending = false; @RequestParameter private String orderBy; @RequestParameter private String start; public String reorder() { if (orderBy.equals(order)) { descending = !descending; } else { descending = false; } order = orderBy; executeQuery(); return null; } }