Ошибка тимелист: org.springframework.expression.spel.SpelEvaluationException - PullRequest
0 голосов
/ 31 октября 2018

что ожидается

после привязки данных, веб-страница должна отражать данные

подробности

Код контроллера

@Controller
@Configuration
@Component
public class Controller {

    @Autowired
    Credentials c;

    @GetMapping("/greeting")
    public String greetingForm(Model model) {
        model.addAttribute("greeting", new RequestData());
        return "greeting";
    }

    @PostMapping("/greeting")

    public String greetingSubmit(@ModelAttribute RequestData greeting) {
        if (c.getUserName().equals(greeting.getId()) && c.getPassword().equals(greeting.getContent()))
        {
        return "result";
        }
        else
        {
            return "error";
        }
    }
}

RequestData.java

public class RequestData {

    private String id;
    private String content;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

Credentials.java

@Component
@Configuration
@PropertySource("classpath:application.properties")
public class Credentials {

    public String userName;
    public String password;

     @Autowired
     private Environment env;

    @Autowired
    public String getUserName() {

         return env.getProperty("spring.username");

            }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Autowired
    public String getPassword() {
         return env.getProperty("spring.password");

            }

    public void setPassword(String password) {
        this.password = password;
    }


}

result.html

 <!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Hello World</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>Hello World</h1>
    <p th:text="'id: ' + ${greeting.id}" />
    <p th:text="'content: ' + ${greeting.content}" />
    <a href="/greeting">Submit another message</a>
</body>
</html>

умеет скомпилировать, упаковать кодовую базу и собрать jar. однако, когда я запускаю файл jar, получаю следующую ошибку:

2018-10-31 15:36:34.259 ERROR 8220 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[disp
atcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context
 with path [] threw exception [Request processing failed; nested exception is or
g.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringE
L expression: "greeting.id" (template: "result" - line 9, col 8)] with root caus
e

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property o
r field 'id' cannot be found on null

Я не уверен, где проблема, доктор тимилеф говорит, что к атрибутам модели можно получить доступ с помощью $ {attributeName}, и я тоже использую то же самое, но тогда почему он говорит, что «идентификатор не найден»

пожалуйста, предложите

1 Ответ

0 голосов
/ 31 октября 2018

С весны mvc doc, цитирую -

Что происходит, если имя атрибута модели не указано явно? В таких случаях имя по умолчанию назначается атрибуту модели на основе по своему типу. Например, если метод возвращает объект типа Учетная запись, имя по умолчанию используется «учетная запись». Вы можете изменить это через значение аннотации @ModelAttribute. Если добавить атрибуты непосредственно к модели, использовать соответствующие перегруженные Метод addAttribute (..) - т.е. с именем атрибута или без него.

В вашем случае

@PostMapping("/greeting")
public String greetingSubmit(@ModelAttribute("greeting) RequestData greeting) {
..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...