Модель не пустая, но FreeMarker выдает ошибку и модель приходить в FreeMarker пустой, при findAll все работает отлично
@GetMapping(value = "{id}")
public String userInfo(@PathVariable Long id, Model model){
model.addAttribute("u",userRepo.findById(id));
return "userInfo";
}
<#list u as user>
<tr>
${u.username!"null or missing"}
</tr>
</#list>
FreeMarker template error (DEBUG mode; use RETHROW in production!):
The value you try to list is an extended_hash+string (Optional wrapped into f.e.b.StringModel),
thus you must specify two loop variables after the "as"; one for the key, and another for the value, like <#... as k, v>).
---- FTL stack trace ("~" means nesting-related):
- Failed at: #list u as user [in template "userInfo.ftlh" at line 1, column 1]
---- Java stack trace (for programmers).line 1, column 1]
---- Java stack trace (for programmers):
---- freemarker.core.NonSequenceOrCollectionException: [... Exception message was already printed; see it above ...] at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:351
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244
at freemarker.core.Environment.visitIteratorBlock(Environment.java:644
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94
at freemarker.core.Environment.visit(Environment.java:334
at freemarker.core.Environment.visit(Environment.java:340
at freemarker.core.Environment.process(Environment.java:313
at freemarker.template.Template.process(Template.java:383
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61
at java.base/java.lang.Thread.run(Thread.java:834 undefined)
Ответы (1 шт):
Автор решения: Ангелина Никонова
→ Ссылка
Да, так и должно быть ведь при .findById() одно значение, а не список, поэтому среда не понимает как перебирать объект, а .findAll() возвращает Collection, который понятно как перебирать, либо не перебирайте как список, либо оберните
Collections.singletonList(userRepo.findById())