Hi everyone! I can' t solve this problem please help me.
I' ve the following error when I try to load the insertUser.jsp page.
insertUser.jspCode:java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'utente' available as request attribute org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
My web.xmlCode:<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Add User</title> </head> <body> <sf:form method="POST" action="addUser.htm" modelAttribute="utente"> <table> <tr> <td>Email :</td> <td><sf:input path="email"/> </tr> <tr> <td>Nome :</td> <td><sf:input path="nome"/> </tr> <tr> <td>Cognome :</td> <td><sf:input path="cognome"/> </tr> <tr> <td>Password :</td> <td><sf:input path="password"/> </tr> <tr> <td><input type="submit" value="Inserisci Utente"></td> </tr> </table> </sf:form> </body> </html>
My dispatcherCode:<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>PAE</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>PAE</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>pages/index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/PAE-servlet.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
ControllerCode:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- the application context definition for the springapp DispatcherServlet --> <!-- Definisce in che package si trovano i controller gestiti con le annotazioni --> <context:component-scan base-package="controller" /> <!-- Mi consente di determinare un path ed un suffisso da utilizzare nel controller --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="../pages/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
And the class UtenteCode:package controller; import orm.Utente; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; import dao.UtenteDAO; @Controller public class addUserController { @RequestMapping(value="addUser", method = RequestMethod.POST) public String createUser (@ModelAttribute("utente") Utente utente, BindingResult result) { System.out.println("Email " + utente.getEmail() + " registrata!"); // ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // UtenteDAO dao = (UtenteDAO) ctx.getBean("utenteDao"); // dao.insertUtente(utente); return "User registered!"; } }
The class Utente is annotated with Hibernate and it works. Sorry for my english!Code:package orm; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "UTENTE") public class Utente implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID_UTENTE", nullable = false, unique = true) private Long id; @Column(name = "EMAIL", length = 50, nullable = false, unique = true) private String email; @Column(name = "PASSWORD", length = 10, nullable = false) private String password; @Column(name = "NOME", length = 20, nullable = false) private String nome; @Column(name = "COGNOME", length = 20, nullable = false) private String cognome; @Embedded @AttributeOverrides({ @AttributeOverride(name = "spazio_totale", column = @Column(name = "SPAZIO_TOTALE", nullable = false)), @AttributeOverride(name = "spazio_utilizzato", column = @Column(name = "SPAZIO_UTILIZZATO", nullable = true)) }) private SpazioDropbox spazioDropbox; /* RELAZIONE PROPRIETARIO CON LA TABELLA "FILE" */ @OneToMany(cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}, // Evito di fare la persistenza esplicitamente mappedBy = "proprietario", // Applico la bidirezionalità orphanRemoval = true, // Quando elimino un oggeto File dalla lista elimino automaticamente tutti gli altri sui riferimenti presenti in altri oggetti fetch = FetchType.LAZY) private Set<File> filePosseduti = new HashSet<File>(); /* RELAZIONE CON LA TABELLA "FILE" MOLTI-A-MOLTI */ @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, // Evito di fare la persistenza esplicitamente mappedBy = "utente", orphanRemoval = true, fetch = FetchType.LAZY) private Set<CartellaCondivisa> cartelleCondivise = new HashSet<CartellaCondivisa>(); /* RELAZIONE CON LA TABELLA COMMENTI */ @OneToMany(cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "utente", orphanRemoval = true, fetch = FetchType.LAZY) private Set<Commento> commenti = new HashSet<Commento>(); public Utente() {} public Utente(String email, String password, String nome, String cognome, SpazioDropbox spazioDropbox) { this.email = email; this.password = password; this.nome = nome; this.cognome = cognome; this.spazioDropbox = spazioDropbox; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCognome() { return cognome; } public void setCognome(String cognome) { this.cognome = cognome; } public SpazioDropbox getSpazioDropbox() { return spazioDropbox; } public void setSpazioDropbox(SpazioDropbox spazioDropbox) { this.spazioDropbox = spazioDropbox; } public Set<File> getFilePosseduti() { return filePosseduti; } public void setFilePosseduti(Set<File> filePosseduti) { this.filePosseduti = filePosseduti; } public Set<CartellaCondivisa> getCartelleCondivise() { return cartelleCondivise; } public void setCartelleCondivise(Set<CartellaCondivisa> cartelleCondivise) { this.cartelleCondivise = cartelleCondivise; } public Set<Commento> getCommenti() { return commenti; } public void setCommenti(Set<Commento> commenti) { this.commenti = commenti; } @Override public boolean equals(Object o) { if (o instanceof Utente) { Utente u = (Utente) o; if (this.email.equals(u.email) && this.password.equals(u.password)) return true; } return false; } @Override public int hashCode() { return this.email.hashCode() + this.password.hashCode(); } @Override public String toString() { return email+","+password+","+nome+","+cognome+","+spazioDropbox.getSpazio_totale()+","+spazioDropbox.getSpazio_utilizzato(); } }


Reply With Quote