I came across this post and tried to manually implement it as explained by Andrew Swan.
I now systematically get the following exception:
Code:
Caused by: javax.servlet.jsp.JspException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
at org.apache.jsp.WEB_002dINF.views.plis.findPlisByMultiField_jspx$Helper.invoke(findPlisByMultiField_jspx.java:440)
at org.apache.jsp.tag.web.form.find_tagx._jspx_meth_form_005fform_005f0(find_tagx.java:404)
at org.apache.jsp.tag.web.form.find_tagx.access$1(find_tagx.java:384)
at org.apache.jsp.tag.web.form.find_tagx$Helper.invoke0(find_tagx.java:484)
at org.apache.jsp.tag.web.form.find_tagx$Helper.invoke(find_tagx.java:501)
at org.apache.jsp.tag.web.util.panel_tagx._jspx_meth_c_005fif_005f0(panel_tagx.java:185)
at org.apache.jsp.tag.web.util.panel_tagx.doTag(panel_tagx.java:131)
at org.apache.jsp.tag.web.form.find_tagx._jspx_meth_util_005fpanel_005f0(find_tagx.java:351)
at org.apache.jsp.tag.web.form.find_tagx._jspx_meth_c_005fif_005f0(find_tagx.java:210)
at org.apache.jsp.tag.web.form.find_tagx.doTag(find_tagx.java:176)
at org.apache.jsp.WEB_002dINF.views.plis.findPlisByMultiField_jspx._jspService(findPlisByMultiField_jspx.java:89)
... 113 more
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
at org.springframework.web.servlet.tags.form.SelectTag.writeTagContent(SelectTag.java:199)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
at org.apache.jsp.WEB_002dINF.views.plis.findPlisByMultiField_jspx$Helper.invoke0(findPlisByMultiField_jspx.java:375)
at org.apache.jsp.WEB_002dINF.views.plis.findPlisByMultiField_jspx$Helper.invoke(findPlisByMultiField_jspx.java:433)
... 123 more
Here is my jspx:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:jsptagdir:/WEB-INF/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:springform="http://www.springframework.org/tags/form" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<form:find finderName="ByMultiField" id="ff_trc_suivi_domain_Pli" path="/plis" z="user-managed">
<field:input disableFormBinding="true" field="identifiant" id="f_trc_suivi_domain_Pli_identifiant" max="50" min="1" required="false" z="user-managed"/>
<field:datetime disableFormBinding="true" field="dateReceptionFrom" dateTimePattern="${pli_datereception_date_format}" id="f_trc_suivi_domain_Pli_dateReceptionFrom" required="false" z="user-managed"/>
<field:datetime disableFormBinding="true" field="dateReceptionTo" dateTimePattern="${pli_datereception_date_format}" id="f_trc_suivi_domain_Pli_dateReceptionTo" required="false" z="user-managed"/>
<field:checkbox disableFormBinding="true" field="paiement" id="f_trc_suivi_domain_Pli_paiement" z="user-managed"/>
<field:checkbox disableFormBinding="true" field="AR" id="f_trc_suivi_domain_Pli_AR" z="user-managed"/>
<field:input disableFormBinding="true" field="numeroAR" id="f_trc_suivi_domain_Pli_numeroAR" max="50" min="1" required="false" z="user-managed"/>
<field:checkbox disableFormBinding="true" field="FDV" id="f_trc_suivi_domain_Pli_FDV" z="user-managed"/>
<field:select disableFormBinding="true" field="statut" id="f_trc_suivi_domain_Pli_statut" items="${statutplis}" path="statutplis" required="false" z="user-managed"/>
<!-- <field:select disableFormBinding="true" field="conteneurNum" id="f_trc_suivi_domain_Pli_conteneurNum" items="${conteneurnums}" itemLabel="identifiant" itemValue="id" path="conteneurnums" required="false" z="user-managed"/> -->
<springform:select id="f_trc_suivi_domain_Pli_conteneurNum" path="conteneurnums" >
<springform:option value="" label="(blank)" />
<springform:options items="${conteneurnums}" itemValue="id" />
</springform:select>
</form:find>
</div>
Here is my controller:
Code:
package trc.suivi.controller;
import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import org.joda.time.format.DateTimeFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.roo.addon.web.mvc.controller.finder.RooWebFinder;
import org.springframework.roo.addon.web.mvc.controller.scaffold.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import trc.suivi.domain.ConteneurNum;
import trc.suivi.domain.Pli;
import trc.suivi.domain.StatutPli;
import trc.suivi.repository.PliRepository;
@RequestMapping("/plis")
@Controller
@RooWebScaffold(path = "plis", formBackingObject = Pli.class)
@RooWebFinder
public class PliController {
@Autowired
private PliRepository pliRepository;
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
binder.registerCustomEditor(ConteneurNum.class, new PropertyEditorSupport() {
@Override
public void setAsText(final String text) {
if (StringUtils.hasText(text)) {
setValue(ConteneurNum.findConteneurNum(Long.valueOf(text)));
}
else {
setValue(null);
}
}
});
}
@RequestMapping(params = { "find=ByMultiField", "form" }, method = RequestMethod.GET)
public String findPlisByMultiFieldForm(Model uiModel) {
populateMultiFieldForm(uiModel);
return "plis/findPlisByMultiField";
}
@RequestMapping(params = "form", produces = "text/html")
public String createForm(Model uiModel) {
populateEditForm(uiModel, new Pli());
addDateTimeFormatPatterns(uiModel);
return "plis/create";
}
@RequestMapping(params = "find=ByMultiField", method = RequestMethod.GET)
public String findPlisByMultiField(
@RequestParam("identifiant") String identifiant,
@RequestParam("dateReceptionFrom") Date dateReceptionFrom,
@RequestParam("dateReceptionTo") Date dateReceptionTo,
@RequestParam(value="paiement",required=false) Boolean paiement,
@RequestParam(value="AR",required=false) Boolean ar,
@RequestParam("numeroAR") String numeroAR,
@RequestParam(value="FDV", required=false) boolean fdv,
@RequestParam("conteneurNum") ConteneurNum conteneurNum,
@RequestParam("statut") StatutPli statut,
Model uiModel) {
uiModel.addAttribute("plis", pliRepository.findPlisByMultiField(identifiant, dateReceptionFrom, dateReceptionTo, paiement, ar, numeroAR, fdv, conteneurNum, statut));
return "plis/list";
}
void addDateTimeFormatPatterns(Model uiModel) {
uiModel.addAttribute("pli_datecreation_date_format", "yyyy-MM-dd");
uiModel.addAttribute("pli_datemodification_date_format", "yyyy-MM-dd");
uiModel.addAttribute("pli_datereception_date_format", "yyyy-MM-dd");
}
void populateMultiFieldForm(Model uiModel) {
uiModel.addAttribute("pli_datereception_date_format", "yyyy-MM-dd");
uiModel.addAttribute("conteneurnums", ConteneurNum.findAllConteneurNums());
uiModel.addAttribute("statutplis", Arrays.asList(StatutPli.values()));
}
}
Can anyone please help?
Regards,
J.