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)
Die xml:
CommandController:
controller:
Und hier der Fehler:
Vielen Dank schon mal!
Gruß Johannes
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)
...
Gruß Johannes