2017-02-18 5 views
1

Я создал простое приложение, и теперь я пытаюсь подключить его к веб-серверу. Я пытаюсь иметь HTML-форму (используя Thymeleaf), которую пользователь вводит в свое местоположение в виде текста, а затем мой сервер берет и производит результат с использованием этой строки. Поэтому, чтобы начать, я пытаюсь сделать простое искровое приложение, которое делает домашнюю страницу с формой «введите ваше местоположение», которая затем вводит пользователя и что-то делает с ней. Я могу получить «entryMessage», как показывают учебные пособия, но как получить пользовательские данные оказывается сложным.Как получить данные формы в Java Spark с использованием механизма шаблонов Thymeleaf?

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

ThymeleafTemplateEngine engine = new ThymeleafTemplateEngine(); 
    HashMap<String, String> userLocationMap = new HashMap<>(); 

    get("/home", (request, response) -> { 
     userLocationMap.put("entryMessage", "Please enter your location"); 
     return new ModelAndView(userLocationMap, "home"); 
    }, engine); 


    post("/home", (request, response) -> { 
     System.out.println(request.toString()); 
     //System.out.println(request.body()); 
     //System.out.println(userResponse.location); 
     //response.redirect("/locationAccepted"); 
     return userLocationMap.get("userLocation"); 
    }); 

    get("/locationAccepted", (request, response) -> { 
     String location = request.queryParams("userLocation"); 
     return new ModelAndView(userLocationMap, "locationAccepted"); 
    }, engine); 

со следующими thymeleaf шаблоны

home.html

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" 
 
     xmlns:th="http://www.thymeleaf.org"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Title</title> 
 
</head> 
 
<body> 
 
<p> <span th:text="${entryMessage}"> default message </span> </p> 
 
<form action="/locationAccepted" method="post"> 
 
    <input type="text" th:field="userLocation"/> 
 
    <div class="button"> 
 
     <button type="submit">Send your message</button> 
 
    </div> 
 
</form> 
 
</body> 
 
</html>

и locationAccepted.html

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" 
 
     xmlns:th="http://www.thymeleaf.org"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Title</title> 
 
</head> 
 
<body> 
 
<p> <span th:text="${userLocation}"> default message </span> </p> 
 

 
</form> 
 
</body> 
 
</html>

ответ

1

У вас есть две ошибки в коде, как в HTML форме:

  1. В коде Java вы определяете маршрут "/locationAccepted", как GET, но ваша форма method атрибут POST => Измените свою форму на GET.

  2. Если вы хотите получить данные формы input, она должна иметь name со значением userLocation. th:field не переведена на name (ее перевод field атрибут, который я не уверен, что это значит).

Так что ваша форма (после Thymeleaf) должен выглядеть следующим образом:

<form action="/locationAccepted" method="GET"> 
    <input type="text" name="userLocation"/> 
    <div class="button"> 
     <button type="submit">Send your message</button> 
    </div> 
</form> 

И тогда request.queryParams("userLocation") будет работать, как вы хотели.

Смежные вопросы