Spring MVC - SimpleFormController Problem...

h4nnes

Grünschnabel
Hallo zusammen,

ich versuche zur Zeit ein Spring Portlet für Liferay zu schreiben, doch irgendwie scheint mein Controller für ein Suchfeld nicht zu funktionieren.
Ich hoffe, dass mir jemand helfen kann

meine JSP: (die libs sind included)
Code:
<portlet:actionURL var="formAction">
    <portlet:param name="action" value="search"/>
</portlet:actionURL>


<form:form commandName="newsletterCommand" method="post" action="${formAction}">
     <table border="0">
         <tr>
             <td>Search:</td>
            <td><form:input path="searchField"/><form:errors path="searchField"/></td>
            <td><input type="submit" value="submit"/></td>
         </tr>
     </table>
</form:form>


Die xml:
Code:
    <bean id="parameterMappingInterceptor" class="org.springframework.web.portlet.handler.ParameterMappingInterceptor"/>
    
    <bean id="portletModeParameterHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping">
        <property name="order" value="10"/>
            <property name="interceptors">
                <list>
                    <ref bean="parameterMappingInterceptor"/>
                </list>
            </property>
        <property name="portletModeParameterMap">
            <map>
                <entry key="view"> 
                    <map>
                        <entry key="search"><ref bean="newsletterSearchController"/></entry>
                        <entry key="test"><ref bean="JSPController"/></entry>
                    </map>
                </entry>
            </map>
        </property>
    </bean>


    <bean id="newsletterSearchController" class="com.ext.portlet.newsletter.controllers.NewsletterSearchController">
        <property name="sessionForm" value="true"/>
        <property name="commandName" value="newsletterCommand"/>
        <property name="commandClass" value="com.ext.portlet.newsletter.cmd.NewsletterCommand"/>
        <property name="newsletterService" ref="newsletterService"/>
        <property name="formView" value="search"/>
    </bean>


CommandController:
Code:
package com.ext.portlet.newsletter.cmd;

import java.io.Serializable;

@SuppressWarnings("serial")
public class NewsletterCommand implements Serializable{
    
    private String searchField;

    
    public String getSearchField() {
        return searchField;
    }


    public void setSearchField(String searchField) {
        this.searchField = searchField;
    }


}

controller:
Code:
package com.ext.portlet.newsletter.controllers;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.apache.commons.lang.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.mvc.SimpleFormController;

import com.ext.portlet.newsletter.cmd.NewsletterCommand;
import com.ext.portlet.newsletter.model.NewsletterModel;
import com.ext.portlet.newsletter.service.NewsletterService;


public class NewsletterSearchController extends SimpleFormController{    
    
    
    private NewsletterService newsletterService;

    

    

    protected void onSubmitAction(ActionRequest request, ActionResponse response,Object command,BindException errors) 
        throws Exception {

        response.setRenderParameter("action","search");
    }

    @Override
    protected Object formBackingObject(PortletRequest request) throws Exception {

        NewsletterCommand cmd = new NewsletterCommand();
        return cmd;
    }
    
    protected ModelAndView onSubmitRender(RenderRequest request, RenderResponse response, Object command, BindException errors)    throws Exception {
        System.out.println("Start: NewsletterSearchController-onSubmitRender");
        
        NewsletterModel model = null;
        NewsletterCommand cmd = (NewsletterCommand) command;
        
        if(StringUtils.isNotEmpty(cmd.getSearchField())){
                model = newsletterService.getNewsletterModelBySearchString(cmd.getSearchField());
                System.out.println("Search: " + cmd.getSearchField());
        }
        
        System.out.println("Ende: NewsletterSearchController-onSubmitRender");
        return new ModelAndView("search", "newsletterModel", model);
    }
    
    
    public void setNewsletterService(NewsletterService newsletterService) {
        this.newsletterService = newsletterService;
    }
    

    public NewsletterService getNewsletterService() {
        return newsletterService;
    }
}

Und hier der Fehler:

Code:
10:50:42,681 ERROR [InputTag:84] Neither BindingResult nor plain target object f
or bean name 'newsletterCommand' available as request attribute
java.lang.IllegalStateException: Neither BindingResult nor plain target object f
or bean name 'newsletterCommand' available as request attribute
        at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.
java:141)

...
Vielen Dank schon mal!

Gruß Johannes
 
Okay, ich habe das Problem gefunden,... Ich denke es liegt daran, dass ich die selbe JSP wieder aufrufe und dafür das object nicht an den ModelAndView übergebe oder gibt es eine bessere Lösung?
 
Hi,

versuch doch das mal:

Java:
...
new ModelAndView(new RedirectView("search.html"), "newsletterModel", model);

...

Grüße
Peter
 
Zurück