Создаются входные данные в форме, но не присутствующие значения, которые передаются. Как мне это решить? - PullRequest
0 голосов
/ 15 апреля 2019
  1. У меня настроено сопоставление OneToMany для адреса учащегося, поэтому у учащегося может быть несколько адресов.Элементы отображаются правильно, но когда я сохраняю данные через форму, для адреса генерируется идентификатор (пользователь уже создан, мне просто нужно нажать кнопку добавить адрес, также я получаю правильного пользователя), но значения равны нулю, когда ясохранить, вот мои фрагменты java и jsp
@PostMapping("/addAddress")
  public String showFormForAddAddress(@RequestParam("studentId") int id, Model model) {
      Student student = studentService.findStudentById(id);
      Address address = new Address();
      model.addAttribute("address", address);
      List<Address> addresses = student.getAddresses();
      addresses.add(address);
      student.setAddresses(addresses);
      studentService.saveStudent(student);

      return "address-form";
  }

  @GetMapping("/addAddress")
  public String addAddress(@RequestParam("studentId") int id, Model model) {
      Address address = new Address();
      address.setStudentId(id);
      model.addAttribute("address", address);
      return "address-form";
  }

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Address Form</title>
</head>
<body>
    <div id="wrapper">
        <div id="header">
            <h2>SRM Student Relationship Manager (Address)</h2>
        </div>
    </div>
    <div id="container">
        <h3>Save Address</h3>
        <form:form action="addAddress" modelAttribute="address" method="POST">



              <form:input path="studentId" />

            <table>
                <tbody>
                    <tr>
                        <td><label>Address One</label></td>
                        <td><form:input path="addressOne" /></td>
                    </tr>
                    <tr>
                        <td><label>City</label></td>
                        <td><form:input path="city" /></td>
                    </tr>
                    <tr>
                        <td><label>State</label></td>
                        <td><form:input path="state" /></td>
                    </tr>
                    <tr>
                        <td><label>Zip Code</label></td>
                        <td><form:input path="zipCode" /></td>
                    </tr>
                    <tr>
                        <td><label>Address Two</label></td>
                        <td><form:input path="addressTwo" /></td>
                    </tr>
                    <tr>
                        <td><label></label></td>
                        <td><input type="submit" value="Save"></td>
                    </tr>
                </tbody>
            </table>
        </form:form>
    </div>
</body>
</html>
  1. Также, для заверения, это мои сущности
@Entity
@Table(name = "address", catalog = "user_db")
public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "address_id")
    private Integer id;
    private String addressOne;
    private String city;
    private String state;
    private String zipCode;
    private String addressTwo;
    @Column(name = "user_id")
    private Integer studentId;
@Entity
@Table(name = "Student", catalog = "user_db")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "student_id")
    private int id;

    private String firstName;
    private String lastName;
    private String email;
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "student_id", referencedColumnName = "student_id")
    private List<Address> addresses;

Я чувствую, что это может быть проблема с именами, но я не могу разобраться в этом, также я попытался удалить сообщение и просто использовать get, но все равно не сработало.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

это должно быть showForForAddMethod

@PostMapping("/addAddress")
    public String showFormForAddAddress(@RequestParam("studentId") int id, Model model,
            @ModelAttribute("address") Address address) {
        Student student = studentService.findStudentById(id);

        model.addAttribute("address", address);
        List<Address> addresses = student.getAddresses();
        addresses.add(address);
        student.setAddresses(addresses);
        studentService.saveStudent(student);

        return "redirect:/student/list";
    }

Если я создаю новый объект, информация не отображается и, следовательно, она теряется, но когда я передаю адрес в качестве атрибута модели в параметрах, это указывает на объект студента

0 голосов
/ 15 апреля 2019

В вашем методе showFormForAddAddress вы написали model.addAttribute("address", address);, это помещает значения в атрибут модели.

Но вы пытались получить адресную информацию из этого метода, это неправильно.

Вы можете получить соответствующую информацию, используя следующий подход:

Map<String,Object> modelMap = model.getModel().asMap();
Object object = modelMap.get("address");

После этого вы можете преобразовать полученный объект в тип адреса и использовать его

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