«org.apache.jasper.JasperException» после сбоя проверки формы - PullRequest
1 голос
/ 08 мая 2011

Я всегда получаю следующую ошибку, когда мою форму не удается проверить:

org.apache.jasper.JasperException: java.lang.IllegalStateException: ни BindingResult, ни простой целевой объект для имени бина 'не реформируют'доступно как атрибут запроса

Я не получаю эту ошибку, когда ввод формы действителен.Основная причина -

java.lang.IllegalStateException: ни BindingResult, ни простой целевой объект для имени компонента 'regform' не доступны в качестве атрибута запроса

Здесь net.sandbox.controllers.RegistrationController сдля краткости импорт опущен:

@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";
    }
}

Что это значит?


Обновление : добавлены запрошенные файлы JSP.

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>

1 Ответ

0 голосов
/ 09 мая 2011

Это потому, что в вашем методе validateForm(..) вы не помещаете объект поддержки формы в modelMap, как только проверка формы завершится неудачей.Если бы вы реорганизовали свой код следующим образом:

   @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";
    }

, вы могли бы решить свою проблему, но это все еще не оптимальное решение.Рекомендуется использовать метод для заполнения объектов формы следующим образом:

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

с помощью метода populateForm, вам не нужно самостоятельно обрабатывать создание объектов, поддерживающих форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...