繁体   English   中英

Thymeleaf Spring 数据预测问题

[英]Thymeleaf problem with Spring Data Projections

我有一个查询需要返回某些字段,为此我正在使用来自 Spring 数据的投影,但是当我将它作为属性发送到首页时它不起作用,因为 Thymeleaf 无法从中获取字段接口,所以它返回一个空白结果。

我需要返回ID,姓名,身份证明,主要是最后一次查询日期(已翻译)

我尝试通过全名调用该字段,尝试像方法调用一样调用,我还尝试使用th:each="var: ${#vars}"查看服务器发送的所有属性,我得到了:

org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@b0f65c2

编辑:我的尝试:

<td th:text="${u.id}"></td>
<td th:text="${u.getId}"></td>
<td th:text="${u.getId()}"></td>
<td th:text="${u}"></td>

首页:

<table>
  <tr>
    <th>ID</th>
    <th>Nome</th>
    <th>Identificação</th>
  </tr>
  
  <tr th:each="u : ${usuarios}")>
    <td th:text="${u.id}"></td>
    <td th:text="${u.nome}"></td>
    <td th:text="${u.identificacao}"></td>
    <td th:text="${u}"></td> <!-- TEST -->
  </tr>

查看界面:

public interface UsuarioInfoPontoView {

    Long getId();
    
    String getNome();
    
    String getIdentificacao();

    UltimaDataPontoUsuario ultimaDataPontoUsuario();
    
    interface UltimaDataPontoUsuario {
        LocalDate getData();
    }
}

Controller:

@Controller
@RequestMapping("/usuario")
public class UsuarioController {

    private UsuarioService usuarioService;
    
    @Value("${pagina.usuarios.limite_exibicao}")
    private Integer LIMITE_EXIBIR_USUARIOS_PAGINA;
    
    @Autowired
    public UsuarioController(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }
    
    @GetMapping("/listar")
    public String preListar(@RequestParam(defaultValue = "0", name = "page") Integer pagina, ModelMap model) {
        Pageable pageable = PageRequest.of(pagina, LIMITE_EXIBIR_USUARIOS_PAGINA);
        var t = usuarioService.findAllComPontos(pageable);
        System.out.println(t.size()); // Confirmed that is returing data.
        model.addAttribute("usuarios", t);
        
        return "usuarios/listar";
    }

服务:

@Service
@Transactional(readOnly = true)
public class UsuarioService {

    private UsuarioRepository usuarioRepository;

    @Autowired
    public UsuarioService(UsuarioRepository usuarioRepository) {
        this.usuarioRepository = usuarioRepository;
    }
    
    public List<UsuarioInfoPontoView> findAllComPontos(Pageable pageable) {
        Page<UsuarioInfoPontoView> paginaUsuariosEncontrado = usuarioRepository.pegarUsuarioEUltimoPonto(pageable);
        return paginaUsuariosEncontrado.getContent();
    }

存储库界面:

@Repository
public interface UsuarioRepository extends JpaRepository<Usuario, Long>{

    Optional<Usuario> findByNome(String nome);

    Optional<Usuario> findByIdentificacao(String identificacao);

    @Query(value = "SELECT u.id, u.nome, u.identificacao, p.data "
            + "FROM Ponto p JOIN p.usuario u "
            + "ORDER BY p.id DESC", nativeQuery = false)
    Page<UsuarioInfoPontoView> pegarUsuarioEUltimoPonto(Pageable pageable);
}

因为它是投影,所以没有字段可言。 您是否尝试过这样调用接口方法:

<tr th:each="u : ${usuarios}">
    <td th:text="${u.getId()}"></td>
    <td th:text="${u.getNome()}"></td>
    <td th:text="${u.getIdentificacao()}"></td>
</tr>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM