[jboss-user] [JBoss Seam] - AJAX4JSF

JohnEChesher do-not-reply at jboss.com
Tue Apr 24 13:14:49 EDT 2007


I reused the AJAX4JSF search page/code from the booking example to build a search page for my application.  I decided to make the search EJB session-scoped, so that my search criteria would still be there anytime I came back to the screen.  I also wanted to display the "previous" search results whenever I came back to that page, but I wanted to perform a new search, just in case the results would be different searching with the same criteria, but at this new point in time.  So, I added a page action in pages.xml.  Everything seemed to work fine, but I noticed that whenever I do an AJAX-based search from the screen, it does the search twice, once for the AJAX call and apparently once again for the page action defined in pages.xml.  I hadn't thought about it, but a coworker suggested that was behavior he was not expecting, as he thought the AJAX call would be a get rather than a post and that, since the entire page is not rerendered (we tested and it's not), Seam would not execute the page action specified in pages.xml.

I implemented a "workaround" by having my AJAX call invoke a dummy method (does almost nothing), then letting the method specified on the page action do the real work of the search.  This seems to provide the functionality I want without doing a redundant search when doing the AJAX-driven search, but we felt this was a pretty odd way to have to implement this functionality.  Code snippets are below.

Am I missing something?  Is there a more "correct"/elegant way to implement the desired functionality when using Seam and AJAX4JSF together? The less-than-elegant solution I have now works, but I want to ensure I haven't leveraged unintended functionality, which could yield unexpected results or could be disallowed in a future release, or something like that.
Thanks!

Pages.xml:	
<page view-id="/secure/institution_search.xhtml" action="#{institutionSearch.prepSearchPage}">
  |     <navigation from-action="#{institutionSearch.selectInstitution}">
  |         <rule if-outcome="success">
  |             <redirect view-id="/secure/gen_stu_fac.xhtml"/>
  |         </rule>	
  |     </navigation>
  |  </page>   

from the view:
<h:inputText id="searchString" value="#{institutionSearch.searchString}" size="10">
  | 	<a:support event="onkeyup" actionListener="#{institutionSearch.psuedoFindByAllCriteria}" reRender="searchResults" />
  | </h:inputText>

and the session bean:
...
  | ...
  | @Stateful
  | @Synchronized(timeout=5000)
  | @Name("institutionSearch")
  | @Scope(ScopeType.SESSION) 
  | @Restrict("#{identity.loggedIn}")
  | public class InstitutionSearchAction implements InstitutionSearch
  | ...
  | ...
  | 
  | {
  | 
  | 	public void prepSearchPage() {
  | 		if ( ! user.getInstitutions().isEmpty()) {
  | 			foundInstitutions = user.getInstitutionList();  //a case where we don't want to do an actual search...
  | 		}
  | 		else {
  | 			if (prevSearchById) {
  | 				findById();		//where real search occurs...
  | 			}
  | 			else {
  | 				findByAllCriteria();	//where real search occurs...
  | 			}	
  | 		}
  | 	}
  | 	
  | 
  | 	public void psuedoFindByAllCriteria()
  | 	{
  | 		// Set to this value, so that the proper search will be executed when the page is rerendered 
  | 		prevSearchById = false;  
  | 	}
  | ...
  | ...	




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

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




More information about the jboss-user mailing list