[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