Не хочет выдавать список пользователей

191
04 июня 2018, 20:10

Имеется вот такой вот кусочек контроллера:

@RequestMapping(value = "/admin/control", method = RequestMethod.POST)
public String getListUser(Model model) {
    model.addAttribute("user", new User());
    model.addAttribute("listUser", userService.getListUser());
    return "control";
}
@RequestMapping(value = "admin/control/remove/{id}")
public String removeUser(@PathVariable("id") Integer id) {
    userService.removeUser(id);
    return "redirect:/admin/control";
}

Сервис:

@Override
public List<User> getListUser() { return userDao.findAll(); }
@Override
public void removeUser(Integer id) {
    userDao.delete(id);
}

Работает через JpaRepository. Представление:

<c:if test="${!empty listUser}">
        <div id="table-student">
            <table class="table table-striped">
                <tr class="tr">
                    <td width="40">ID</td>
                    <td width="100">Имя</td>
                    <td width="100">Группа</td>
                    <td width="60">Удалить</td>
                </tr>
                <c:forEach items="${listUser}" var="user">
                    <tr>
                        <td>${user.id}</td>
                        <td>${user.username}</td>
                        <td>
                            <c:if test="${user.groupId eq 1}">ПО521</c:if>
                            <c:if test="${user.groupId eq 2}">ПО411</c:if>
                            <c:if test="${user.groupId eq 3}">ТЭ521</c:if>
                            <c:if test="${user.groupId eq 4}">ТЭ411</c:if>
                        </td>
                        <td><a href="<c:url value='/admin/control/remove/${user.id}'/>">Удалить</a></td>
                    </tr>
                </c:forEach>
            </table>
        </div>
    </c:if>

Ну и как вы уже поняли из названия, список пользователей не выводится. Запускал в режиме дебаггинга, до контроллера дело вовсе не доходит, просто не выводит, не понимаю почему. Может кто-нибудь видит ошибку?

А так же, может подскажет кто. Можно ли возвращать строку на несколько представлений? Чтобы не было дублирования методов. Чтобы я мог воспользоваться методом "getListUser" не только на "admin/control", но и по другому url.

UPD. Проблема решена, спасибо, действительно ошибся с выбором запроса. Извиняюсь за неправильную постановку вопроса.

Теперь проблема возникла в другом месте. Еще два метода контроллера:

    @RequestMapping(value = { "/registration", "admin/control" } , method = RequestMethod.GET)
public String registration(Model model) {
    model.addAttribute("userForm", new User());
    return "control";
}
@RequestMapping(value = { "/registration", "admin/control" }, method = RequestMethod.POST)
public String registration(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
    userValidator.validate(userForm, bindingResult);
    if (bindingResult.hasErrors()) {
        return "control";
    }
    userService.save(userForm);
    securityService.autoLogin(userForm.getUsername(), userForm.getConfirmPassword());
    return "redirect:/admin/control";
}

Ошибка: Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/admin/control': {public java.lang.String com.bondarev.studentsystem.controller.UserController.registration(org.springframework.ui.Model), public java.lang.String com.bondarev.studentsystem.controller.UserController.getListUser(org.springframework.ui.Model)}

Есть частичное понимание сути проблемы, однако не знаю как её решить. Если кто-нибудь поможет сэкономить мне немного времени, буду благодарен.)

Answer 1

Судя по всему, проблема в неправильно назначенных на методы контроллера методов запроса. А чтобы список пользователей был доступен во всех представлениях контроллера, можно воспользоваться аннотацией @ModelAttribute.

@Controller
@RequestMapping("/admin/control")
public class UserController {
    @Autowired
    private UserService userService;
    @ModelAttribute("users")
    public List<User> users() {
        return userService.getListUser();
    }
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getListUser(Model model) {
        model.addAttribute("user", new User());
        return "control";
    }
    @RequestMapping(value = "/remove/{id}", method = RequestMethod.POST)
    public String removeUser(@PathVariable("id") Integer id) {
        userService.removeUser(id);
        return "redirect:/admin/control";
    }
}
READ ALSO
Сделать одинаковую высоту блоков

Сделать одинаковую высоту блоков

Нужно сделать одинаковую высоту блоков, при чем не фиксированную, а чтобы можно было добавлять контент и высота всего блока menu подстраивалась...

263
видео плеер ie &lt; 9

видео плеер ie < 9

Нужен пример html видео плеера для ie < 9И стоит ли в 2018 поддерживать ie < 9?

154
Расположить иконки под блок

Расположить иконки под блок

Очень долго пытаюсь решить проблему, необходимо иконки представленные на скриншоте, расположить под саму карточку товараПробовал z-index'ы

181
Сколько ютуб-видео лучше добавить на страницу?

Сколько ютуб-видео лучше добавить на страницу?

Допустим из админки будут добавляться iframe youtube на сайт, и количество добавляемых видео будет большоеСколько лучше должно быть видео на одной...

207