Ошибка при попытке доступа к ошибке проверки в форме Thymleaf - PullRequest
0 голосов
/ 07 января 2020

Существуют ли правила именования атрибутов, сеттеров и геттеров? У меня есть класс модели с атрибутом String с именем uuid, сеттером и геттером setUUID(String uuid) getUUID(), но при попытке проверки входных данных с помощью Thymleaf для отображения ошибки, если она существует, происходит сбой
Примечание : атрибут deviceName работает отлично
Ниже приведены мои фрагменты кода:

Модель

@Entity
public class Device {

    @Id
    @NotBlank
    private String uuid;

    @NotNull
    @NotBlank
    private String deviceName;

    public String getUUID() {
        return uuid;
    }

    public void setUUID(String uuid) {
        this.uuid = uuid;
    }

    public String getDeviceName() {
        return deviceName;
    }

    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }
}

Форма

<form method="post" action="#" th:action="@{/devices/save}" th:object="${device}">
    <input th:field="*{UUID}" th:classappend="${#fields.hasErrors('*{UUID}')} ?'border-danger'" type="text" name="uuid">
    <input th:field="*{deviceName}" th:classappend="${#fields.hasErrors('deviceName')} ?'border-danger'" type="text" name="deviceName">
</form>

Ошибка при попытке анализа шаблона Ошибка при разборе шаблона (шаблон: «ресурс пути к классу [templates / Devices / add-device.html]») org.thymeleaf.exceptions.TemplateInputException: ошибка произошла во время синтаксического анализа шаблона (template: «ресурс пути к классу [templates / Devices / add-device.html]») в org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse (AbstractMarkserTemplate (AbstractMarkupTemplate) 1029 *: 241) в org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone (AbstractMarkupTemplateParser. java: 100) в org.thymeleaf.engine.TemplateManager.pars eAndProcess (TemplateManager. java: 666) в org.thymeleaf.TemplateEngine.process (TemplateEngine. java: 1098) в org.thymeleaf.TemplateEngine.process (TemplateEngine. java: 1072) в org.thymeleaf.spring .view.ThymeleafView.renderFragment (ThymeleafView. java: 362) в org.thymeleaf.spring5.view.ThymeleafView.render (ThymeleafView. java: 189) в org.springframework.web.servlet.DispatcherServlet. . java: 1373) в org.springframework.web.servlet.DispatcherServlet.processDispatchResult (DispatcherServlet. java: 1118) в org.springframework.web.servlet.DispatcherServlet.doDispatch (1057) atserser org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet. java: 943) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet. java: 1006) на веб-сайте org.spr. FrameworkServlet.doGet (FrameworkServlet. java: 898) по адресу javax.servlet.http.HttpServlet.service (HttpServlet. java: 634) по адресу org.springframework.web. servlet.FrameworkServlet.service (FrameworkServlet. java: 883) по адресу javax.servlet.http.HttpServlet.service (HttpServlet. java: 741) в орг. apache .catalina.core.ApplicationFilterChainin. java: 231) в орг. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в орг. apache .tomcat.websocket.server.WsFilter.doFilter (WsFilter. java: 53) в орг. apache .catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain. java: 193) в орг. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. * 1654) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 320) в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (фильтр 126). .springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor. java: 90) в org.springframework.security.web.Filte rChainProxy. doFilter (FilterChainProxy. java: 334) в org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter. java: 137) в org.springframework.security.web.FilterChainFoxFirFirFinFoxFirFinFoxFirFinFoxFirFinFoxFirFinFoxFirFirFirFoxFirFirFirFirFirFirFox.Ru) java: 334) в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter. java: 111) в org.springframework.security.web. FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) по адресу org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilwork.raF.FF.F). doFilter (FilterChainProxy. java: 334) по адресу org.springframework.security.web.savedrequest. java: 334) в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter (AbstractAuthenticationProcessingFilter. java: 200) в org.springframework.security.web.Filter * ChainProxy $ Filter.Cherin.Filter.Filter. 334) в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter. java: 116) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFi lter (FilterChainProxy. java: 334) в org.springframework.security.web.csrf.CsrfFilter.doFilterInternal (CsrfFilter. java: 117) в org.springframework.web.filter.OncePerRequestFilter OnceFilter. *: 119) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) в org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter 92: Header. по адресу org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter. java: 77) по адресу org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFlayer.serf: « $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) в org.springframework.security.web.context.request.asyn c .WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter. java: 56) в org.springframework.web.filter.Oilil: OnceFF () в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 334) в org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy.secure.secure. .web.FilterChainProxy. . java: 271) в орг. apache .catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain. java: 193) в орг. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. : 166) на org.springframework.web.filter.RequestContex tFilter.doFilterInternal (RequestContextFilter. java: 100) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) в орг. java: 193) в орг. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в org.springframework.web.filter.FormContentFilter.doFilterInternal (FormContentFilter: 93.) 1100 в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) в org. apache .catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain. * 1103 at. 19 * at. 19 at. 193g. 19: .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в org.springframework.boot.actuate.metrics. web.servlet.WebMvcMetricsFilter.doFilterInternal (WebMvcMetricsFilter. java: 108) по адресу org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 1198al.Aph.Calbin.al.Cat.Alg.ph.). innerDoFilter (ApplicationFilterChain. java: 193) в орг. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в org.springframework.web.filter.CharacterEndoFilder *: 201) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 119) в орг. 1116 * .lang.Thread.run (Thread. java: 748)
Вызывается: org.attoparser.ParseException: исключительная ситуация при вычислении выражения SpringEL: "# fields.hasErrors ('uuid')" (template: "Devices / add-device "- строка 28, столбец 87) в org.attoparser.MarkupParser.parseDocument (MarkupParser. java: 393) в org.attoparser.MarkupParse r.parse (MarkupParser. java: 257) в org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse (AbstractMarkupTemplateParser. java: 230) ... еще 88
Вызвано: org.thymeleaf. TemplateProcessingException: исключение, оценивающее выражение SpringEL: "# fields.hasErrors ('uuid')" (template: "Devices / add-device" - строка 28, столбец 87) в org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate (SPELVariableExpressionEvaluator. java: 290) по адресу org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression (VariableExpression. java: 166) по адресу org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor .thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess (AbstractAttributeTagProcessor. java: 74) в org.thymeleaf.processor.element.AbstractElementTagProcessor.process (AbstractElementTagProcessory.php. figurationUtils $ ElementTagProcessorWrapper.process (ProcessorConfigurationUtils java:. 633) в org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement (ProcessorTemplateHandler java:. 918). в org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleStandaloneElementEnd (TemplateHandlerAdapterMarkupHandler java: 260) ... еще 90
Причина: org.springframework.beans.NotReadablePropertyException: недопустимое свойство 'uuid' класса бина [com.logica.eguestbookservice.Models.Device]: свойство бина 'uuid' не доступно для чтения или имеет недопустимый метод получения: соответствует ли тип возвращаемого значения получателю параметра типа установщика? в org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue (AbstractNestablePropertyAccessor java:. 622) в org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue (. AbstractNestablePropertyAccessor java: 612) в org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue (AbstractPropertyBindingResult . java: 104) в org.springframework.validation.AbstractBindingResult.getFieldValue (AbstractBindingResult. java: 228) в org.springframework.web.servlet.support.BindStatus. (BindStatus. java: 129) в или .springframework.web. Еще 113

1 Ответ

2 голосов
/ 07 января 2020

Thymeleaf, скорее всего, следует спецификации JavaBean, поэтому вам нужно будет назвать ваши методы getUuid() и setUuid и изменить форму на:

<input th:field="*{uuid}" th:classappend="${#fields.hasErrors('*{uuid}')} ?'border-danger'" type="text" name="uuid">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...