I'll give this a try tomorrow at work (3-day weekend here in Barcelona ...)
But I am curious, why should this be necessary? According to Spring's
'convention over configuration' rules, if I create any type of
FormController that uses a Command object (say MyObjectFormController), it
should use the MyObject Command object by default, correct? That's what I
thought anyway ... But even after hard-wiring it in my applicationContext
file it doesn't seem to like it ...

Anyway, as I said, I'll try your recommendation tomorrow. Many thanks!

Bob



mraible wrote:
> 
> On 9/21/07, syg6 <[EMAIL PROTECTED]> wrote:
>>
>> Well, not sure why this is necessary but I stuck this in my
>> dispatcher-servlet.xml:
>>
>> <property name="commandName" value="findStreetSection"/>
>> <property name="commandClass"
>> value="com.myco.myapp.model.FindStreetSection"/>
>>
>> and now when I debug commandClass is correct. But in my page I still
>> don't
>> have access to it. If I put something like this:
>>
>> <form:form method="post" action="findstreetsection.html"
>> id="findStreetSectionForm">
>>   <form:input path="idStreet" id="idStreet" cssClass="text medium"/>
>>
>> I get this error:
>>
>> Neither BindingResult nor plain target object for bean name 'command'
>> available as request attribute
> 
> Have you tried <form:form commandName="findStreetSection">?
> 
> Matt
> 
> 
>>
>> The fact that I have to manually tell my Controller what its Command
>> class
>> is worries me, and is probably the problem. But I think my names are all
>> correct. What's certain is, despite the fact that my commandClass seems
>> to
>> be set, it doesn't make it to the jsp.
>>
>> Bummer.
>>
>> Bob
>>
>>
>>
>> syg6 wrote:
>> >
>> > I tried doing it with showForm() and it kind of works:
>> >
>> > protected ModelAndView showForm(
>> > {
>> >   List<StreetSection> sections = null;
>> >
>> >   if (request.getParameter("id") != null)
>> >   {
>> >     String id = (String)request.getParameter("id");
>> >     Street street = streetManager.get(new Long(id));
>> >
>> >     Integer number = new Integer(request.getParameter("number"));
>> >     sections = streetSectionManager.findByNumber(street, number);
>> >   }
>> >
>> >   ModelAndView mav = new ModelAndView("findSections", "sections",
>> > sections);
>> >   mav.addObject("streets",referenceData(request));
>> >   return mav;
>> >
>> > }
>> >
>> > showForm() is called, and referenceData() is also called, thus loading
>> my
>> > streets. I am not sure if this is the best way to do it ... and I am
>> not
>> > sure if that second-to-last line, mav.addObject() should be mav.put()
>> > instead ... both seem to work ...
>> >
>> > But now in my page I don't have access to the Command (Model) object.
>> In
>> > theory, naming my Controller FindStreetSectionController, because of
>> > conventions, will automatically use my FindStreetSection object, right?
>> > But when I debug and look at this.commandClass it is null.
>> >
>> > What am I doing wrong?
>> >
>> > Thanks,
>> > Bob
>> >
>> >
>> > syg6 wrote:
>> >>
>> >> 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#a12824550
>>
>> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> -- 
> http://raibledesigns.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-write-a-controller-and-test-for-%27find%27-functionality-tf4496287s2369.html#a12861790
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