Здравствуйте, эксперты, У меня есть код контроллера, который выдает вышеупомянутую ошибку. Он работал нормально до вчерашнего дня, я понятия не имею, что коллега сделал с этим кодом, и сегодня я вижу ошибку:
Neither BindingResult nor plain target object for bean name 'sideForm' available as request attribute
Подскажите, пожалуйста, где искать такую ошибку. Может я допускаю какую-то ошибку в объявлении метода POST или GET или возвращаю что-то не то?
Ваша помощь будет очень признательна :)
package com.att.analytics.ui;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.si.myworld.business.AdminChart;
import com.si.myworld.business.Chart;
import com.si.myworld.dao.AdminChartSummaryData;
import com.si.myworld.dao.BulletinData;
import com.si.myworld.dao.ChartData;
@RequestMapping("/index.html")
@Controller
public class IndexController {
private static final Logger log = Logger.getLogger(IndexController.class);
/**
* Called to load the page initially (GET request)
*
* @param model
* @return
*/
@RequestMapping(method = RequestMethod.GET)
public String getCharts(ModelMap model) {
Chart chart = new Chart();
chart.setTimeline("Monthly");
chart.setStartDt("mm/dd/yyyy");
chart.setEndDt("mm/dd/yyyy");
AdminChartSummaryData acsd = new AdminChartSummaryData();
List<AdminChart> list = acsd.getLandingChartDataList();
if (list.size() == 4) {
Chart chart1 = new Chart(list.get(0));
Chart chart2 = new Chart(list.get(1));
Chart chart3 = new Chart(list.get(2));
Chart chart4 = new Chart(list.get(3));
model.put("chart1", chart1);
model.put("chart2", chart2);
model.put("chart3", chart3);
model.put("chart4", chart4);
log.info("chart 1>>>>" + chart1);
ChartData cd = new ChartData();
String chartOneDatasource = cd.fetchChartDatasourceName(chart1
.getChartSubgroup());
String chartTwoDatasource = cd.fetchChartDatasourceName(chart2
.getChartSubgroup());
String chartThreeDatasource = cd.fetchChartDatasourceName(chart3
.getChartSubgroup());
String chartFourDatasource = cd.fetchChartDatasourceName(chart4
.getChartSubgroup());
String breadcrumbOne = chart1.getChartGroup() + ">>"
+ chart1.getChartSubgroup();
String breadcrumbTwo = chart2.getChartGroup() + ">>"
+ chart2.getChartSubgroup();
String breadcrumbThree = chart3.getChartGroup() + ">>"
+ chart3.getChartSubgroup();
String breadcrumbFour = chart4.getChartGroup() + ">>"
+ chart4.getChartSubgroup();
BulletinData bd = new BulletinData();
String bulletin = bd.getBulletinData();
model.put("sideForm", chart);
model.put("chartOneDatasource", chartOneDatasource);
model.put("chartTwoDatasource", chartTwoDatasource);
model.put("chartThreeDatasource", chartThreeDatasource);
model.put("chartFourDatasource", chartFourDatasource);
model.put("breadcrumbOne", breadcrumbOne);
model.put("breadcrumbTwo", breadcrumbTwo);
model.put("breadcrumbThree", breadcrumbThree);
model.put("breadcrumbFour", breadcrumbFour);
model.put("bulletin", bulletin);
}
return "land";
}
@RequestMapping(method = RequestMethod.POST)
public String loadCharts(HttpServletRequest request, ModelMap model, @ModelAttribute("sideForm") Chart chart) {
String from_date = request.getParameter("startDt");
String to_date = request.getParameter("endDt");
chart.setStartDt(from_date);
chart.setEndDt(to_date);
ChartData cd = new ChartData();
BulletinData bd = new BulletinData();
String bulletin = bd.getBulletinData();
AdminChartSummaryData acsd = new AdminChartSummaryData();
List<AdminChart> list = acsd.getLandingChartDataList();
if (list.size() == 4) {
Chart chart1 = new Chart(list.get(0));
Chart chart2 = new Chart(list.get(1));
Chart chart3 = new Chart(list.get(2));
Chart chart4 = new Chart(list.get(3));
model.put("chart1", chart1);
model.put("chart2", chart2);
model.put("chart3", chart3);
model.put("chart4", chart4);
String chartOneDatasource = cd.fetchChartDatasourceName(chart1
.getChartSubgroup());
String chartTwoDatasource = cd.fetchChartDatasourceName(chart2
.getChartSubgroup());
String chartThreeDatasource = cd.fetchChartDatasourceName(chart3
.getChartSubgroup());
String chartFourDatasource = cd.fetchChartDatasourceName(chart4
.getChartSubgroup());
model.put("chartOneDatasource", chartOneDatasource);
model.put("chartTwoDatasource", chartTwoDatasource);
model.put("chartThreeDatasource", chartThreeDatasource);
model.put("chartFourDatasource", chartFourDatasource);
String breadcrumbOne = chart1.getChartGroup() + ">>"
+ chart1.getChartSubgroup();
String breadcrumbTwo = chart2.getChartGroup() + ">>"
+ chart2.getChartSubgroup();
String breadcrumbThree = chart3.getChartGroup() + ">>"
+ chart3.getChartSubgroup();
String breadcrumbFour = chart4.getChartGroup() + ">>"
+ chart4.getChartSubgroup();
model.put("breadcrumbOne", breadcrumbOne);
model.put("breadcrumbTwo", breadcrumbTwo);
model.put("breadcrumbThree", breadcrumbThree);
model.put("breadcrumbFour", breadcrumbFour);
}
return "land";
}
@ModelAttribute("timeline")
public Collection<String> populateTimeline() {
return Arrays.asList("Daily", "Weekly", "Monthly", "Quarterly",
"Annually", "12_Month_Rolling");
}
}
Эта страница получает значения из формы, показанной ниже:
<form:form commandName="sideForm">
<div style="font-weight:bold; color:#000">Timeline</div>
<div style="margin:0 0 5px 0;"><form:select path="timeline" items="${timeline}" id="tm"/></div>
<div class="tofrom">From:</div>
<form:input path="startDt" id="from_date" size="7" maxlength="10" />
<div class="tofrom">To:</div>
<form:input path="endDt" id="to_date" size="7" maxlength="12" />
<input type="submit" value="Update Chart" />
</form:form>
Убедитесь, что ваша форма Spring упоминает modelAttribute="<Имя модели"
.
Пример:
@Controller
@RequestMapping("/greeting.html")
public class GreetingController {
@ModelAttribute("greeting")
public Greeting getGreetingObject() {
return new Greeting();
}
/**
* GET
*
*
*/
@RequestMapping(method = RequestMethod.GET)
public String handleRequest() {
return "greeting";
}
/**
* POST
*
*
*/
@RequestMapping(method = RequestMethod.POST)
public ModelAndView processSubmit(@ModelAttribute("greeting") Greeting greeting, BindingResult result){
ModelAndView mv = new ModelAndView();
mv.addObject("greeting", greeting);
return mv;
}
}
В вашем JSP:
<form:form modelAttribute="greeting" method="POST" action="greeting.html">
Убедитесь, что вы объявили боб, связанный с формой, в методе GET связанного контроллера, а также добавили его в модель model.addAttribute("uploadItem", uploadItem);
, которая содержит аннотацию @RequestMapping(method = RequestMethod.GET)
.
Например, UploadItem.java связан с myform.jsp, а контроллер - SecureAreaController.java
myform.jsp содержит
<form:form action="/securedArea" commandName="uploadItem" enctype="multipart/form-data"></form:form>
@RequestMapping("/securedArea")
@Controller
public class SecureAreaController {
@RequestMapping(method = RequestMethod.GET)
public String showForm(Model model) {
UploadItem uploadItem = new UploadItem(); // declareing
model.addAttribute("uploadItem", uploadItem); // adding in model
return "securedArea/upload";
}
}
Как вы видите, я объявляю UploadItem.java в методе GET контроллера.
Попробуйте добавить параметр BindingResult в методы, аннотированные @RequestMapping
, которые имеют @ModelAttribute
аннотированные параметры. После каждого @ModelAttribute
параметра, Spring ищет BindingResult в следующей позиции параметра (порядок важен).
Поэтому попробуйте изменить:
@RequestMapping(method = RequestMethod.POST)
public String loadCharts(HttpServletRequest request, ModelMap model, @ModelAttribute("sideForm") Chart chart)
...
To:
@RequestMapping(method = RequestMethod.POST)
public String loadCharts(@ModelAttribute("sideForm") Chart chart, BindingResult bindingResult, HttpServletRequest request, ModelMap model)
...
Я работал на этот же вопрос, и я уверен, что я выяснил точную причину его.
Ни BindingResult, ни простого целевого объекта для фасоли имя 'команда' доступен в качестве атрибута запроса
Если ваше значение successView собственность (название страницы JSP) такая же, как и введите имя страницы, то второе значение конструктор ModelAndView должны совпадать с имя_команды страницы входа.
Е. Г.
индекс.ССП
<html>
<body>
<table>
<tr><td><a href="Login.html">Login</a></td></tr>
</table>
</body>
</html>
dispatcher-servlet.xml
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/Login.html">
<ref bean="userController"/>
</entry>
</map>
</property>
</bean>
<bean id="userController" class="controller.AddCountryFormController">
<property name="commandName"><value>country</value></property>
<property name="commandClass"><value>controller.Country</value></property>
<property name="formView"><value>countryForm</value></property>
<property name="successView"><value>countryForm</value></property>
</bean>
AddCountryFormController.java
package controller;
import javax.servlet.http.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.mvc.SimpleFormController;
public class AddCountryFormController extends SimpleFormController
{
public AddCountryFormController(){
setCommandName("Country.class");
}
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object command,BindException errors){
Country country=(Country)command;
System.out.println("calling onsubmit method !!!!!");
return new ModelAndView(getSuccessView(),"country",country);
}
}
Country.java
package controller;
public class Country
{
private String countryName;
public void setCountryName(String value){
countryName=value;
}
public String getCountryName(){
return countryName;
}
}
countryForm.ССП
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form commandName="country" method="POST" >
<table>
<tr><td><form:input path="countryName"/></td></tr>
<tr><td><input type="submit" value="Save"/></td></tr>
</table>
</form:form>
</body>
<html>
Страница ввода имя_команды=то"Страна"
в
ModelAndView конструктор как вернуть новый ModelAndView(getSuccessView (), то"Страна" и,страны);
Имя_команды означает inputpage ==ModeAndView ("Ну имя_команды наша")
Мы столкнулись с таким же вопросом и изменил имя_команды=" и"
в в modelAttribute=" и"
в в JSP страницу, чтобы решить эту проблему.
Я сталкивался с этой проблемой. Вот мое решение:
Ниже ошибка при запуске небольшой Весна применение:-
*HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/employe.jsp at line 12
9: <form:form method="POST" commandName="command" action="/SpringWeb/addEmploye">
10: <table>
11: <tr>
12: <td><form:label path="name">Name</form:label></td>
13: <td><form:input path="name" /></td>
14: </tr>
15: <tr>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:465)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194)
org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:129)
org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:119)
org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:89)
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
org.apache.jsp.WEB_002dINF.jsp.employe_jsp._jspx_meth_form_005flabel_005f0(employe_jsp.java:185)
org.apache.jsp.WEB_002dINF.jsp.employe_jsp._jspx_meth_form_005fform_005f0(employe_jsp.java:120)
org.apache.jsp.WEB_002dINF.jsp.employe_jsp._jspService(employe_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.26 logs.*
Для того, чтобы решить эту проблему нужно сделать следующее в классе контроллера:-
" чтобы " импорт орг.springframework.веб.сервлет.ModelAndView; в
"...