I've been messing with this issue for a while. Basically I want to be able to
search for StreetSections. Each StreetSection has a Street and a range of
numbers. When you enter the search page the first time you see a list of
Streets. Select one and enter a number and it will show you a list of
StreetSections.

Originally I wanted to do this without a Model object. But when I made my
FindStreetSectionsController with an AbstractController I noticed that the
referenceData() method, which I use to load all Streets, wasn't being
called. That's because it is only called when you use a *FormController and
call showForm() or a method that calls showForm() (like onSubmit()).
Eventually I got it working but was calling referenceData() by hand, which I
thought was ugly. But, I thought, I can't use a *FormController because I am
not using a Command (Model) object. 

After further thought though I realized that on the search page I always
have a form with two fields - idStreet and number - the stuff to search for,
so I decided to create a FindStreetSection Model object with those two
fields , and that way I'd be able to use a BaseFormController and
theoretically load automagically the Streets with referenceData().

But I have a problem - I am not sure what method to implement in my
Controller. I have tried implementing both formBackingObject() and
onSubmit() but my test is failing. Here is my Controller:

protected Object formBackingObject()
{
  FindStreetSection fss = new FindStreetSection();
  String id = request.getParameter("id");
  String number = request.getParameter("number");
                
  if (!StringUtils.isBlank(id))
  { 
    fss.setIdStreet(new Long(id));
    fss.setNumber(new Integer(number));
  } 
   
  return fss; 
} 
        
public ModelAndView onSubmit() 
{
  
  List<StreetSection> sections = null;
  FindStreetSection fss = (FindStreetSection) command; 
                
  if (ft.getIdStreet() != null)
  {
    Street street = streetManager.get(fss.getIdStreet());
    sections = streetSectionsManager.findByNumber(street, fss.getNumber());
  }
                
  return new ModelAndView("findStreetSections", "sections", sections);
}

And here is my test:

public void testSearch() throws Exception
{
  MockHttpServletRequest request = newGet("/findstreetsection.html"); 
  request.addParameter("id", "1");
  request.addParameter("number", "196");

  ModelAndView mav = c.handleRequest(request, new
MockHttpServletResponse()); 
  ModelMap m = mav.getModelMap();
    
  assertNotNull(m.get("sections"));
  assertTrue(((List) m.get("sections")).size() > 0);
}

formBackingMethod() is being called but onSubmit() is not, thus my test
fails saying sections is null. I think my test is correctly written, I am
just not sure which method I need to implement in my Controller. onSubmit()
doesn't seem to be it. Looking at other (form) tests, in order to get
onSubmit() to be called it seems you have to do something like this:

request = newPost("/findstreetsection.html"); 
super.objectToRequestParameters(fss, request); 
request.addParameter("number", "198");

in order for onSubmit() to be called. I tried this as well but no go. Anyway
I never need to do any kind of save, update or delete, I simply am using a
Command (Model) object to making searching easier. So which method to I need
to implement in my Controller to get this to work?

Thanks,
Bob
-- 
View this message in context: 
http://www.nabble.com/How-to-write-a-controller-and-test-for-%27find%27-functionality-tf4496287s2369.html#a12821913
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to