EL1008E: Свойство или поле 'content' не может быть найдено в объекте типа 'java.util.ArrayList' - может быть, оно не является общедоступным или недействительным? - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь сделать простой фильтр для своего проекта (телефонной книги), чтобы можно было найти контакты пользователей по их электронной почте, а не по идентификатору.Когда я просто запускаю URL: http://localhost:8080/home/phonebook., я получаю следующую ошибку.

Сообщение об ошибке

org.thymeleaf.exceptions.TemplateProcessingException: Исключение при оценке выражения SpringEL: «data.content» (шаблон: «/ home / phonebook» - строка 29, столбец 13)

Причина: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойство илиполе 'content' не может быть найдено в объекте типа 'java.util.ArrayList' - может быть, не общедоступным или недействительным?

HomeController

@RequestMapping(value = {"/home/phonebook"}, method = RequestMethod.GET)
    public String showPage(Model model, @RequestParam(defaultValue = "0") int page){
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        User user = userService.findUserByEmail(auth.getName());
        model.addAttribute("data",phonebookRepository.findAllByUserEmail(user.getEmail(),PageRequest.of(page,10)));
        model.addAttribute("currentPage",page);
        return "/home/phonebook";
    }

Phonebook.html

<tr th:each="phonebook :${data.content}">
        <td th:text="${phonebook.id}"></td>
        <td th:text="${phonebook.surname}"></td>
        <td th:text="${phonebook.firstname}"></td>
        <td th:text="${phonebook.phoneNumber}"></td>
        <td>
            <a th:href="@{delete/(id=${phonebook.id})}" class="btn btn-danger delBtn">Delete</a>
            <a th:href="@{findOne/(id=${phonebook.id})}" class="btn btn-primary eBtn">Edit</a></td>
    </tr>
    </tbody>
    </table>
        <hr/>
        <ul class="nav nav-pills">
            <li class="nav-item" th:each="i: ${#numbers.sequence(0,data.totalPages-1)}">
                <a th:href="@{/home/phonebook(page=${i})}" th:text="${i}" class="nav-link"
                   th:classappend="${currentPage}==${i}?'active':''"></a>
            </li>
        </ul>

Хранилище телефонных книг

@Repository("phonebookRepository")
public interface PhonebookRepository extends JpaRepository<Phonebook,Integer> {
    List<Phonebook> findAllByUserEmail(String email, Pageable pageable);
}

SecurityConfig

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery("select email, password, active from users where email=?")
                .authoritiesByUsernameQuery("select u.email, r.role from users u inner join user_role ur on(u.user_id=ur.user_id) inner join role r on(ur.role_id=r.role_id) where u.email=?")
                .passwordEncoder(passwordEncoder());

    }

ОБНОВЛЕНИЕ 1

Внесены изменения в <tr th:each="phonebook :${data}">, и я думаю, что это исправляет, но я получил новую ошибку;

org.thymeleaf.exceptions.TemplateProcessingException: Исключительная ситуация при вычислении выражения SpringEL: "# numbers.sequence (0, data.totalPages-1)" (шаблон: "/ home / phonebook" - line 42, столбец 38)

Причина: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойство или поле 'totalPages' невозможно найти для объекта типа 'java.util.ArrayList' - возможно, нетобщедоступный или недействительный?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

data.content - это просто свойство, вместо этого просматривайте $ data

0 голосов
/ 11 июня 2018

Изменить

<tr th:each="phonebook : ${data.content}">

на

<tr th:each="phonebook : ${data}">

Поскольку вы хотите повторить результат списка запросов, но data.contentпросто собственность.

...