java.lang.IllegalStateException: Ni BindingResult ni de la plaine de l'objet cible pour bean nom de "catégorie" disponibles comme attribut de la requête
J'ai regardé presque toutes les réponses relatives à ce problème sur le web, mais ne pouvait pas comprendre le problème dans mon code.
Voici ma page JSP.
<form:form method="POST" commandName="category" modelAttribute="category" action="search_category">
<form:input path="category_name" />
<input type="submit" value="Submit">
</form:form>
Quand je supprime
<form:input path="category_name" />
Il fonctionne très bien. Je peux communiquer avec mon contrôleur. Si le problème est lié à cette ligne.
@Controller
public class SearchCategory {
@Autowired
private CategoryService categoryService;
@RequestMapping(value = "/search_category", method = RequestMethod.POST)
public @ResponseBody String searchCategoryFromDatabase(@ModelAttribute("category") Category category, BindingResult result){
return "something";
}
}
Voici mon web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
C'est mon servlet-context.xml
<!-- Set the default page as index.jsp -->
<mvc:view-controller path="/" view-name="index"/>
<!-- Map resources -->
<mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/web-resources/" />
<!-- Map simple view name such as "test" into /WEB-INF/views/test.jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
Et mon applicationContext.xml
<!-- Enable @Controller annotation support -->
<mvc:annotation-driven />
<context:annotation-config/>
<!-- Set the default page as index.jsp -->
<mvc:view-controller path="/" view-name="index"/>
<!-- Map resources -->
<mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/web-resources/" />
<!-- Map simple view name such as "test" into /WEB-INF/views/test.jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Scan classpath for annotations (eg: @Service, @Repository etc) -->
<context:component-scan base-package="com.XXXX"/>
<!-- JDBC Data Source. It is assumed you have MySQL running on localhost port 3306 with
username root and blank password. Change below if it's not the case -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/XXXX"/>
<property name="username" value="XXXX"/>
<property name="password" value="XXXX"/>
<property name="validationQuery" value="SELECT 1"/>
</bean>
<!-- Hibernate Session Factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="packagesToScan">
<array>
<value>com.XXXX</value>
</array>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
</value>
</property>
</bean>
<!-- Hibernate Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- Activates annotation based transaction management -->
<tx:annotation-driven transaction-manager="transactionManager"/>
Je suis probablement fait quelque chose de mal dans mes fichiers XML. Je suis de nouveau pour cette Spring - Hibernate personnel afin d'attente pour votre aide. Merci..
C'est l'exception se faire jeter
Stacktrace:] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'category' 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:168)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
at org.apache.jsp.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:208)
at org.apache.jsp.index_jsp._jspx_meth_form_005fform_005f0(index_jsp.java:168)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:100)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:149)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Voyons le gestionnaire qui rend la JSP.
Pouvez-vous essayer de retourner le retour de la catégorie""; au lieu de retourner "quelque chose" dans votre méthode de contrôleur;
désolé de ne pas obtenir exactement ce que vous voulez dire. Pouvez-vous plus spesific.. je ne suis pas bon avec la terminologie.
Il ne fonctionne pas. Même exception
Le formulaire est dans une JSP. Je veux voir la méthode de gestionnaire transmet à ce point de vue.
Pouvez-vous essayer de retourner le retour de la catégorie""; au lieu de retourner "quelque chose" dans votre méthode de contrôleur;
désolé de ne pas obtenir exactement ce que vous voulez dire. Pouvez-vous plus spesific.. je ne suis pas bon avec la terminologie.
Il ne fonctionne pas. Même exception
Le formulaire est dans une JSP. Je veux voir la méthode de gestionnaire transmet à ce point de vue.
OriginalL'auteur likeachamp | 2014-02-14
Vous devez vous connecter pour publier un commentaire.
Si vous êtes arriver à
index.jsp
par quelque chose commehttp://localhost:8080/yourapp
, je vais supposer que vous avez un<welcome-file>
.Cela signifie que le
index.jsp
génère le code HTML sans aucun pré-traitement par le Printemps. Vous êtes à essayer de rendre ceoù
<form:form>
est à partir du Printemps de la bibliothèque de balises. Tout d'abord, notez que vous êtes en utilisant à la foiscommandName
etmodelAttribute
. C'est redondant. Utiliser l'un ou l'autre, pas les deux. Deuxièmement, lorsque vous spécifiez l'un de ces, le tag de la mise en œuvre recherche unHttpServletRequest
attribut dont le nom est spécifié. Dans votre cas, aucun attribut a été ajouté à laHttpServletRequest
attributs. C'est parce que le conteneur de Servlet transmis à votreindex.jsp
directement.Au lieu de cela, créer un nouveau
@Controller
méthode de gestionnaire qui sera ajouté un attribut du modèle et de l'avant à l'index.jsp
vue.Vous pouvez vous débarrasser de cette
Aussi, déplacer tout
mvc
configuration de votreapplicationContext.xml
fichier sur votreservlet-context.xml
fichier. C'est là où il appartient. Voici pourquoi.J'ai beaucoup d'idées, mais elles nécessitent toutes de toutes de votre configuration et de vos classes. Ce n'est pas l'idéal. Vous devriez plutôt essayer de comprendre ce que chaque élément de configuration que vous avez fait. Quel est le but de
component-scan
? Quel est le but demvc:annotation-driven
? Qu'est ce qu'un@RequestMapping
? Ce qui est un point de vue et comment est-il résolu? Nous pouvons résoudre votre problème immédiat, mais qui ne va pas aider dans le long terme, si vous ne comprenez pas les précédents concepts.J'ai en fait travaillé sur la plupart d'entre eux. C'est pourquoi je suis surprenant de constater que ce n'est pas de travail. Il semble que j'ai besoin de comprendre plus profondément. Merci pour l'aide.
J'ai une autre question.. Normalement quand je supprime la forme/catégorie-nom de la ligne, il fonctionne très bien. Quand je bouge mvc:annotation-driven de applicatioNContext de servlet-contexte comme vous l'avez mentionné, je les ai aucune correspondance trouvée pour la requête HTTP avec URI " pour search_category.. Pouvez-vous me dire pourquoi ? Peut-être la raison derrière cette "catégorie" problème est le même
Si vous supprimez cette ligne, la balise n'a pas besoin d'obtenir de l'attribut de la demande pour quoi que ce soit.
<form:input>
constructions HTML<input>
élément basé sur la propriété (un champ) d'un attribut de la demande. Si vous l'omettez, il n'y a pas de raison d'utiliser l'attribut de la demande, ce qui, dans votre cas, serait absente de toute façon.OriginalL'auteur Sotirios Delimanolis
Cette erreur se produit généralement lorsque votre formulaire de saisie id ne sont pas tenus correctement, ce qui signifie que le nom/id utilisé dans les balises de formulaire différent de la fève.
OriginalL'auteur Ashneet
Cela fonctionne pour moi!
Contrôleur
OriginalL'auteur Grace C.