Help

Controls

PermLinkWikiLink

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

Forum: Seam Users Forum ListTopic List
09. Sep 2008, 15:10 CET | Link

There is a session bean (I've tried statefull and stateless) called SearchManagerBean (component name searchManager)

The request parameter is injected and there is a getter, plus one method:

  @RequestParameter
  String queryString;

  public String getQueryString() {
    return queryString;
  }

  public String search() {
    return "/nodeList.xhtml";
  }

When rendering nodeList.xhtml, there is a `nodes' component, supplied by the @Factory method in another bean, NodeManagerBean:

  @In(create=false, required=false)
  SearchManager searchManager;

  @Factory("nodes")
  public void findNodes() {
    StringBuffer q = "FROM Node";
    if(searchManager != null)
      q = "FROM Node WHERE name LIKE '%" + searchManager.getQueryString() + "%'";
    nodes = em.createQuery(q).getResultList();
  }


The problem I face is this:
- in the search() method of SearchManagerBean, the value of queryString is useable
- however, when searchManager.getQueryString() is called from the @Factory method in NodeManagerBean, the searchManager instance that has been injected says that the parameter is null

One solution I found was making the SearchManagerBean scope CONVERSATION, however, this means that the search parameter is used every time the nodeList is fetched - that is not what I want. I only want the parameters to hang around for long enough to render the page.

I also tried encapsulating the queryString in another JavaBean, with scope PAGE, that didn't work either.