[英]Problem printing a data in thymeleaf template with Spring boot
[英]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.