2011-05-08 3 views
1

je reçois toujours l'erreur suivante lorsque mon formulaire ne parvient pas à valider:« org.apache.jasper.JasperException » après validation de formulaire ne

org.apache.jasper.JasperException: java.lang.IllegalStateException: Ni BindingResult ou objet cible brut pour le nom de bean 'regform' disponible en tant qu'attribut de requête

Je ne reçois pas cette erreur lorsque l'entrée de formulaire est valide. La cause racine est

java.lang.IllegalStateException: Ni BindingResult ni simple objet cible pour le nom de haricot « de RegForm » disponible demande attribut

Voici net.sandbox.controllers.RegistrationController les importations omis pour de brièveté saké:

@Controller 
@RequestMapping("/register") 
public class RegistrationController { 
    @Autowired 
    private UserInfo userInfo; 

    @RequestMapping(method = RequestMethod.GET) 
    public String showRegForm(Model model) { 
     RegistrationForm regForm = new RegistrationForm(); 
     model.addAttribute("regform", regForm); 
     return "regform"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String validateForm(@Valid RegistrationForm regForm, BindingResult result, Model model) { 
     if (result.hasErrors()) { 
      return "regform"; 
     } 

     userInfo.setUserName(regForm.getFirstName()); 
     model.addAttribute("regform", regForm); 
     return "regsuccess"; 
    } 
} 

Qu'est-ce que cela signifie?


Mise à jour: Ajout des fichiers JSP demandé.

regform.jsp

<jsp:include page="includes/header.jsp"> 
    <jsp:param name="pageTitle" value="Registration" /> 
</jsp:include> 
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
     <h2>Register below.</h2> 
     <form:form method="post" commandName="regform"> 
      <p><form:input path="firstName" /> <form:errors path="firstName" /></p> 
      <p><input type="submit" /></p> 
     </form:form> 
<jsp:include page="includes/footer.jsp" /> 

header.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<jsp:useBean id="userInfo" scope="session" class="net.sandbox.sessionbeans.UserInfo" /> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title><%= request.getParameter("pageTitle") %></title> 
    </head> 
    <body> 
     <h1 style="float: left; width: 50%">Sandbox -- <%= request.getParameter("pageTitle") %></h1> 
     <h4 style="float: left; text-align: right; width: 50%"><% out.print(userInfo.getUserName()); %></h4> 
     <hr style="clear: both" /> 

footer.jsp

<hr /> 
    <p><i>Copyright information goes here.</i></p> 
    </body> 
</html> 
+0

Veuillez poster des balises de formulaire jsp –

+0

J'ai ajouté la source JSP pour le formulaire ci-dessus. – Pieter

Répondre

0

C'est parce que, dans votre méthode validateForm(..) vous ne mettez pas un objet de support de forme dans le modelMap dès la validation du formulaire échoue. Si vous réorganiser votre code comme ceci:

@RequestMapping(method = RequestMethod.POST) 
    public String validateForm(@Valid RegistrationForm regForm, BindingResult result, Model model) { 
     model.addAttribute("regform", regForm); 
     if (result.hasErrors()) { 
      return "regform"; 
     } 

     userInfo.setUserName(regForm.getFirstName());   
     return "regsuccess"; 
    } 

vous pouvez résoudre votre problème, mais il est toujours pas une solution optimale. La meilleure pratique consiste à utiliser une méthode pour remplir les objets de formulaire comme ceci:

@ModelAttribute("regform") 
public RegistrationForm populateForm() { 
    RegistrationForm regForm = new RegistrationForm(); 
    /* init regForm */ 
    return regForm; 
} 

en utilisant la méthode populateForm, vous n'avez pas besoin de gérer la création de la forme des objets soutien vous.

+0

Je ne reçois plus l'erreur du serveur, mais l'utilisateur ne présente pas d'erreur de validation de formulaire. J'ai défini le message sur les contraintes: '@NotEmpty (message =" Entrez votre prénom s'il vous plaît ")' et '@Size (min = 2, message =" Il est hautement improbable que vous ayez un nom à une lettre. "' – Pieter

Questions connexes