Ни BindingResult, ни простой целевой объект для имени компонента «персона» не доступны в качестве атрибута запроса - PullRequest
0 голосов
/ 18 июня 2019

Теперь я новичок в Spring mvc, и я попытался создать веб-приложение, и я застреваю в этой ошибке, которая оказывается кошмаром.

Ни BindingResult, ни простой целевой объект для имени компонента "персона" не доступны в качестве атрибута запроса

Теперь я попробовал это и это

 package com.org.spring.controller;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.stereotype.Controller;
  import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;

 import com.org.hibernate.model.Person;
 import com.org.spring.service.PersonService;

 @Controller
 public class PersonController {

private PersonService personService;

@Autowired(required=true)
@Qualifier(value="personService")
public void setPersonService(PersonService ps){
    this.personService = ps;
}

@RequestMapping(value = "/persons", method = RequestMethod.GET)

public String listPersons(ModelMap model) {
    model.addAttribute("person", new Person());
    model.addAttribute("listPersons", this.personService.listPersons());
    return "person";
     }




//For add and update person both

@RequestMapping(value= "/person/add", method = RequestMethod.POST)
public String addPerson(@ModelAttribute("person") Person p){

    if(p.getId() == 0){
        //new person, add it
        this.personService.addPerson(p);
    }else{
        //existing person, call update
        this.personService.updatePerson(p);
    }

    return "redirect:/persons";

}

@RequestMapping("/remove/{id}")
public String removePerson(@PathVariable("id") int id){

    this.personService.removePerson(id);
    return "redirect:/persons";
}

@RequestMapping("/edit/{id}")
public String editPerson(@PathVariable("id") int id, Model model){
    model.addAttribute("person", this.personService.getPersonById(id));
    model.addAttribute("listPersons", this.personService.listPersons());
    return "person";
}

}

И мой взгляд

        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
        <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
        <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
        <%@ page session="false" %>
        <html>
        <head>
            <title>Person Page</title>
            <style type="text/css">
                .tg  {border-collapse:collapse;border-spacing:0;border-color:#ccc;}
                .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;}
                .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}
                .tg .tg-4eph{background-color:#f9f9f9}
            </style>
        </head>
        <body>
        <h1>
            Add a Person
        </h1>

        <c:url var="addAction" value="/person/add" ></c:url>

        <form:form action="${addAction}" modelAttribute="person">
        <table>
            <c:if test="${!empty person.name}">
            <tr>
                <td>
                    <form:label path="id">
                        <spring:message text="ID"/>
                    </form:label>
                </td>
                <td>
                    <form:input path="id" readonly="true" size="8"  disabled="true" />
                    <form:hidden path="id" />
                </td> 
            </tr>
            </c:if>
            <tr>
                <td>
                    <form:label path="name">
                        <spring:message text="Name"/>
                    </form:label>
                </td>
                <td>
                    <form:input path="name" />
                </td> 
            </tr>
            <tr>
                <td>
                    <form:label path="country">
                        <spring:message text="Country"/>
                    </form:label>
                </td>
                <td>
                    <form:input path="country" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <c:if test="${!empty person.name}">
                        <input type="submit"
                            value="<spring:message text="Edit Person"/>" />
                    </c:if>
                    <c:if test="${empty person.name}">
                        <input type="submit"
                            value="<spring:message text="Add Person"/>" />
                    </c:if>
                </td>
            </tr>
        </table>    
        </form:form>
        <br>
        <h3>Persons List</h3>
        <c:if test="${!empty listPersons}">
            <table class="tg">
            <tr>
                <th width="80">Person ID</th>
                <th width="120">Person Name</th>
                <th width="120">Person Country</th>
                <th width="60">Edit</th>
                <th width="60">Delete</th>
            </tr>
            <c:forEach items="${listPersons}" var="person">
                <tr>
                    <td>${person.id}</td>
                    <td>${person.name}</td>
                    <td>${person.country}</td>
                    <td><a href="<c:url value='/edit/${person.id}' />" >Edit</a></td>
                    <td><a href="<c:url value='/remove/${person.id}' />" >Delete</a></td>
                </tr>
            </c:forEach>
            </table>
        </c:if>
        </body>
        </html>

Теперь я знаю, что с этой проблемой уже сталкивались, но я пробовал разные решения, она не работала, кто-нибудь может мне помочь в этом

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