Итак, я начал изучать java + Spring, и у меня проблема с "th: if". Когда я хочу напечатать на localhost: 8080 / car YearOfProduction = 2000, и я использую th: info = "$ {info} == '2000'" в моих шаблонах ничего не происходит, но когда я удаляю th: info = "$ {info} == '2000'", все работает нормально, это означает, что когда я пишу для Пример 1999 года в YearOfProduction мое приложение печатает на локальном хосте год, который я написал.
Мой класс контроллера:
@Controller public class CarCotnroller {
@RequestMapping(value = "/car", method = RequestMethod.POST)
public String carPost(@ModelAttribute("carForm") CarForm form, Model model) {
model.addAttribute("info", "Rok produkcji samochodu to: " + form.getYearOfProduction());
return "cars";
}
@RequestMapping(value = "/car", method = RequestMethod.GET)
public String carPost(Model model) {
model.addAttribute("carForm", new CarForm());
return "car";
}
}
Мой класс формы:
public class CarForm {
private String carname;
private String yearOfProduction;
public CarForm(String carname, String yearOfProduction) {
this.carname = carname;
this.yearOfProduction = yearOfProduction;
}
public CarForm() {
}
public String getCarname() {
return carname;
}
public void setCarname(String carname) {
this.carname = carname;
}
public String getYearOfProduction() {
return yearOfProduction;
}
public void setYearOfProduction(String yearOfProduction) {
this.yearOfProduction = yearOfProduction;
}
}
и мои шаблоны:
<!DOCTYPE html>
<html lang = "en" xmlns:th = "http://www.thymeleaf.org/">
<head>
<title>Title</title>
</head>
<body>
<center><span th:if = "${info} == '2000'" th:text = "${info}"></span></center>
</br></br>
<form th:action = "@{/car}" method = "post" th:object = "${carForm}">
Car name: <input type = "text" th:field = "*{carname}">
<p></p>
year of production: <input type = "text" th:field = "*{yearOfProduction}">
<p></p>
<input type = "submit" value = "send">
</form>
</body>
</html>Ничего не произошло. $ {info} - строка
Вы хотите, чтобы он печатал только ${info}, если это 2000? Почему бы вам просто не написать <span>2000</span>? Я не понимаю предназначение th:if.
Когда я изменил $ {info} на int и попробовал другие сравнения, например: th: if = "$ {info gt 2000}" и th: if = "$ {info & gt; 2000}", я получаю такие ошибки: "Exception Assessment Выражение SpringEL: "info gt 2000" (шаблон: "car" - строка 9, столбец 15) "и" Исключение, оценивающее выражение SpringEL: "info> 2000" (шаблон: "car" - строка 9, столбец 15) ".. ...
потому что я изучаю это и хочу знать, что делаю не так :)
Возможный дубликат Thymeleaf - Как сравнить строку с параметром запроса в html в теге Thymeleaf «th: if»?




Вы можете использовать утилиты Струны:
<span th:if = "${#strings.equals(info, '2000')}" th:text = "${info}"></span>
ваш код выглядит нормально, но он все еще не работает, и я не знаю почему ..; /
Если вам нужно только распечатать любую информацию, основанную на каком-либо условии, почему бы вам не попробовать что-то вроде:
<span th:text = "${info} == '2000' ? 'something' : 'something else'"></span>
Или, если вам действительно нужен тег if, то что-то вроде:
<span th:if = "${info} == '2000'>Something</span><span th:if = "not ${info} == '2000'">Something else</span>
Возможно, вы захотите быстро прочитать Компараторы Thymeleaf и равенство
ваш код тоже выглядит нормально, но он все равно не работает, и я не знаю почему ..; /
Я до сих пор не знаю, почему это не работает, но я сделал это по-другому, написав в CarController:
model.addAttribute("info", form.getYearOfProduction() == 2000 ? form.getYearOfProduction(): "Error");
и это отлично работает. Спасибо тебе за все :)
${info}- этоStringилиint? Что будет, если попробоватьth:if = "${info == 2000}"