Отображение MVC в шаблон с использованием тимелина - PullRequest
0 голосов
/ 23 ноября 2018

Обучаю себя Spring 5, SpringBoot и MVC с использованием тимелина.Это простое приложение.Сначала я работаю со своим контроллером, чтобы правильно заполнить представление, прежде чем перейти на уровень доступа к данным.

Моя проблема заключается в том, что представление не заполняется данными, которые я создал в контроллере.

Это мой контроллер:

// generates a logger class for you
@Slf4j
@Controller
@RequestMapping("/select")
public class AreaCodeController {

/*
 * This method is called BEFORE the @GetMapping method.
 * Building a list of items to display on the select template
 */

@ModelAttribute()
public void addAreaToModel(Model model) {
    // id, code, country, abbr, provStateLongName, StateCode
    List<Area> listing = Arrays.asList(new Area(1000, 123, "US", "AL", "Alabama", StateCode.AL),
            new Area(1001, 124, "US", "MS", "Mississippi", StateCode.MS),
            new Area(1002, 125, "US", "WA", "Washington", StateCode.WA),
            new Area(1003, 126, "US", "WV", "West Virgina", StateCode.WV),
            new Area(1004, 127, "US", "GA", "Georgia", StateCode.GA),
            new Area(1005, 128, "US", "IL", "Illonis", StateCode.IL),
            new Area(1006, 129, "US", "OR", "Oregon", StateCode.OR),
            new Area(1007, 121, "US", "CA", "California", StateCode.CA),
            new Area(1008, 122, "US", "NV", "Nevada", StateCode.NV),
            new Area(1009, 120, "US", "NM", "New Mexico", StateCode.NM),
            new Area(1010, 130, "US", "LA", "WildWilly", StateCode.LA));

    StateCode[] stateCodes = Area.StateCode.values();
    for (StateCode stateCode : stateCodes) {
        model.addAttribute("areaCodeList", filterByStateCode(listing, stateCode));

    }

}

@GetMapping
public String showSelectForm(Model model) {
    model.addAttribute("select", new BusinessNumber());
    return "select";
}

private List<Area> filterByStateCode(List<Area> listing, StateCode sc) 
{
    return listing.stream().filter(x -> x.getCode().equals(sc)).collect(Collectors.toList());
}

}

Это мой взгляд:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Virtual Business Number Listing</title>
<link rel="stylesheet" th:href="@{/styles.css}" />

</head>

<body>
	<h1>List of Available Business Numbers</h1>
	<img th:src="@{/images/phone.png}"  style="width:200px;height:125px"/>

	<form method="POST" th:object="${select}">
	
		<div class="grid">
			<div class="area-group" id="abbrs">
				<h3>Choose Your Business Number:</h3>
				<div th:each="area : ${areaCodeList}">
					<input  type="checkbox" name="areaCodeList"  th:value="{area.id}" /> 
						<span th:text="${area.code}">Area Code</span><br/>
				</div>
			</div>
			<br/>
			<input type="Submit" id="submitButton" th:value="Save">
		</div>
	</form>
</body>
</html>

Я наблюдаю такое поведение:

enter image description here

Любые предложения будут ценны.

Спасибо,

Расс

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

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

1- на ваш взгляд: <form method="POST" th:object="${select}" *th:action="@{/something}"*>

2-в вашем контроллере: выше вашего метода @GetMapping должен быть @PostMapping ( value = "/ что-то" ), потому что в вашей форме есть метод post, создающий новый объект, выберите

0 голосов
/ 23 ноября 2018

Пройдя по коду, я решил собственную ошибку.Каким бы болезненным это ни было, оно включало несколько вещей:

  • Метод filterByStateCode использовал неправильный атрибут для фильтрации.Он всегда возвращался пустым.
  • Добавление того же ключа для атрибута модели переписывало каждую запись после исправления метода фильтра.
  • Шаблон 'select' не вводил текст в поле создания.

    enter image description here

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