DennisKingsman
@DennisKingsman
Студент

Как корректно считать данные с веб страницы и положить в бд?

у меня есть интерфейс , который наследуется от интерфейса для работы с бд предоставленного спрингом
import org.springframework.data.repository.CrudRepository;

public interface UserRepo extends CrudRepository<ClientOrder, Integer> {
}


есть класс Dao для работы с данными
public class AppUserDAO {

    @Autowired
    private UserRepo userRepository;

    public void addUserAccount(ClientOrder clientOrder){
        userRepository.save(clientOrder);
     }

    public Iterable<ClientOrder> findAllOrders(){
        Iterable<ClientOrder> customers = userRepository.findAll();
        return customers;
    }
}

есть сама сущность с геттерами и сеттерами (на всякий случай укажу и ее)
@Entity
@Table(name = "Web_client")
public class ClientOrder {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(name = "first_name", nullable = false)
    private String firstName;

    @Column(name = "last_name", nullable = false)
    private String lastName;

    @Column(name = "email",  nullable = false)
    private String eMail;

    @Column(name = "password", nullable = false)
    private String password;
//...
}


и есть контроллер для работы со страницами
@Controller
public class MainContoller {

    private static Iterable<ClientOrder> orders;

    private AppUserDAO userDAO;

    @Value("${error.message}")
    private String errorMessage;

    @RequestMapping(value = {"/"}, method = RequestMethod.GET)
    public String index(Model model){
        return "index";
    }

    @RequestMapping(value = { "/personList" }, method = RequestMethod.GET)
    public String personList(Model model) {

        orders = userDAO.findAllOrders();

        model.addAttribute("persons", orders);

        return "personList";
    }

    @RequestMapping(value = { "/registerPerson" }, method = RequestMethod.POST)
    public String savePerson(Model model, //
                             @ModelAttribute("personForm") ClientOrder personForm) {

        String firstName = personForm.getFirstName();
        String lastName = personForm.getLastName();
        String email = personForm.geteMail();
        String password = personForm.getPassword();

        if (firstName != null && firstName.length() > 0 //
                && lastName != null && lastName.length() > 0) {
            ClientOrder newPerson = new ClientOrder();

            newPerson.setFirstName(firstName);
            newPerson.setLastName(lastName);
            newPerson.seteMail(email);
            newPerson.setPassword(password);
            userDAO.addUserAccount(newPerson);

            return "redirect:/personList";
        }

        model.addAttribute("errorMessage", errorMessage);
        return "addPerson";
    }
}


который мапит начальную страницу с index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<input value="register" type="button" onclick="location.href=registerPerson" />
<input value="Log in" type="button" onclick="location.href='personList.html'" />
</body>
</html>

которая ссылается на 2 других страницы с которыми замапены свои контроллеры:
registerPeson:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>Add Person</title>
</head>
<body>
<h1>Create a Person:</h1>

<!--
   In Thymeleaf the equivalent of
   JSP's ${pageContext.request.contextPath}/edit.html
   would be @{/edit.html}
   -->

<form th:action="@{/registerPerson}"
      th:object="${personForm}" method="POST">
    First Name:
    <input type="text" th:field="*{firstName}" />
    <br/>
    Last Name:
    <input type="text" th:field="*{lastName}" />
    <br/>
    email :
    <input type="text" th:field="*{email}" />
    <br/>
    password:
    <input type="text" th:field="*{password}" />
    <br/>
    <input type="submit" value="Create" />
</form>

<br/>

<!-- Check if errorMessage is not null and not empty -->

<div th:if="${errorMessage}" th:utext="${errorMessage}"
     style="color:red;font-style:italic;">
    ...
</div>

</body>
</html>

и person list:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>Person List</title>
</head>
<body>
<h1>Person List</h1>
<a href="addPerson">Add Person</a>
<br/><br/>
<div>
    <table border="1">
        <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Email</th>
        </tr>
        <tr th:each ="person : ${persons}">
            <td th:utext="${person.getFirstName}">...</td>
            <td th:utext="${person.getLastName}">...</td>
            <td th:utext="${person.getEmail}">...</td>
        </tr>
    </table>
</div>
</body>
</html>>

но при попытке открыть любую из этих ссылок ничего не выходить хотя вроде все сопоставленно правильно и правильно указан context path, помогите пожалуйста разобраться, заранее спасибо
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!

Первое, что сразу попадается на глаза -
public interface UserRepo extends CrudRepository<ClientOrder, Integer> {
}


public class ClientOrder {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Long id;


Обратите внимание, что создали вы тип Long, а используете Integer

Соответственно, должно быть так
public interface UserRepo extends CrudRepository<ClientOrder, Long>


+ это интерфейс, необязательно писать public

+ Надеюсь, что для сущности ClientOrder есть конструктор. Просто, в сниппете этого не увидел, решил уточнить. Если нет, то создайте:

ClientOrder() {}

По идее тут нужно раскомментировать строку
public String savePerson(Model model,
                             @ModelAttribute("personForm") ClientOrder personForm) {


Проверку на пустоту лучше проводить не так:
firstName != null && firstName.length() > 0
а так:
firstName != null && !firstName.isEmpty()
так как у вас строка
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы