spring-data-jpa EL 1008 E:在类型为“java.util.ArrayList”的对象上找不到属性或字段“content”-可能不是公共的或无效的?

zpgglvta  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(171)

我试图使我的项目(电话簿)简单的过滤器,能够找到用户的联系人,而不是他们的电子邮件ID。当我只是lauch的URL:http://localhost:8080/home/phonebook。我收到以下错误。

错误消息

异常处理。模板处理异常:对SpringEL表达式求值时出现异常错误:“数据.内容”(模板:“/家庭/电话簿”-第29行第13列)
引发错误:EL 1008 E:在类型为“java.util.ArrayList”的对象上找不到属性或字段“content”-可能不是公共的或无效的?

家庭控制器

@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";
    }

电话簿.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);
}

安全配置

@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}">进行了修改,我认为它修复了它,但我得到了一个新的错误;
异常处理。模板处理异常:对SpringEL表达式求值时出现异常错误:“#数字.序列(0,data. totalPages-1)”(模板:“/家庭/电话簿”-第42行第38列)
引发错误:EL 1008 E:在类型为“java.util.ArrayList”的对象上找不到属性或字段“totalPages”-可能不是公共的或无效的?

bnl4lu3b

bnl4lu3b1#

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

<tr th:each="phonebook : ${data}">
因为您要迭代查询列表结果,但data.content只是一个属性。

ivqmmu1c

ivqmmu1c2#

data.content只是一个属性,请改为循环$data

相关问题