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]