2015-07-21 4 views
0

Я программирую весной и использую Thymeleaf в качестве своего представления и пытаюсь создать форму, в которой пользователи могут обновлять свой профиль. У меня есть страница профиля, в которой перечислены данные пользователя (имя, фамилия, адрес и т. Д.), И есть ссылка, которая говорит «редактировать профиль». Когда эта ссылка нажата, она возвращает их в форму, где они могут редактировать свой профиль. Форма состоит из текстовых полей, которые они могут вводить, так же, как ваша стандартная форма регистрации.Как добавить значения по умолчанию для полей ввода в Thymeleaf

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

Это должно вести себя как стандартная страница редактирования профиля.

Вот отрезок моей страницы edit_profile.html:

Имя:

Вот метод вид контроллера, который возвращает edit_profile.html страницу:

@RequestMapping(value = "/edit", method = RequestMethod.GET) 
    public String getEditProfilePage(Model model) { 
     model.addAttribute("currentUser", currentUser); 
     System.out.println("current user firstname: " + currentUser.getFirstname()); 
     model.addAttribute("user", new User()); 
     return "edit_profile"; 
    } 

currentUser.getFirstname () выводит ожидаемое значение, но я получаю пустые входные значения в форме.

Спасибо.

ответ

2

Решил проблему путем удаления th:field вообще и вместо того, чтобы с помощью th:value к сохраните значение по умолчанию и html name и id для поля модели. Таким образом, name и id действуют как th:field.

3

Я немного смущен, вы добавляете currentUser и новый пользовательский объект к карте модели.

Но, если CurrentUser является целевым объектом, вы просто хотите сделать:

<input type="text" name="firstname" value="James" th:value="${currentUser.firstname}" />

Из документации: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html

+0

Нет, я хочу отобразить текущую информацию об объекте «currentUser». После ввода новых полей они сохраняются в «пользователе», а «пользовательский» объект отправляется как запрос PUT для обновления полей. – Kingamere

+0

Затем вы пытаетесь связать два разных состояния с одним полем, только так, я вижу, что это делается с помощью некоторых трюков javascript. – dardo

1

У меня не было формы с элементами ввода, но только кнопка, которая должна вызывать определенный метод Spring Controller и отправлять идентификатор животного в список (так что у меня был список уже существующих участников на моей странице). Я изо всех сил пытался понять, как отправить этот идентификатор в форму. Вот мое решение:

Итак, я начал иметь форму только с одним полем ввода (в конце я бы сменил скрытое поле). В этом случае, конечно, id будет пустым после отправки формы.

<form action="#" th:action="@{/greeting}" th:object="${animal}" method="post"> 
    <p>Id: <input type="text" th:field="*{id}" /></p> 
    <p><input type="submit" value="Submit" /> </p> 
</form> 

Следующая не выдаст ошибку, но ни она подавала идентификатор animalIAlreadyShownOnPage в.

<form action="#" th:action="@{/greeting}" th:object="${animal}" method="post"> 
    <p>Id: <input type="text" th:value="${animalIAlreadyShownOnPage.id}" /></p> 
    <p><input type="submit" value="Submit" /> </p> 
</form> 

В другом посте рекомендуется использовать атрибут «th: attr», но он тоже не работает.

Это, наконец, сработало - я просто добавил элемент name («id» - это атрибут String в POJO для животных).

<form action="#" th:action="@{/greeting}" th:object="${animal}" method="post"> 
    <p>Id: <input type="text" th:value="${animalIAlreadyShownOnPage.id}" name="id" /></p>        
    <p><input type="submit" value="Submit" /> </p> 
</form> 
+0

для другого фокуса разница заключается в том, что добавлено имя атрибута – Babu