Java 正在尝试从下拉列表添加到数据库中

Java 正在尝试从下拉列表添加到数据库中,java,hibernate,spring-boot,Java,Hibernate,Spring Boot,我试图为用户添加一个新事件,但它不起作用,我认为问题在于html格式,关系是多对多的。使用spring引导和hibernate 多谢各位。 html表单 <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Serving Web Content</title> <meta http-eq

我试图为用户添加一个新事件,但它不起作用,我认为问题在于html格式,关系是多对多的。使用spring引导和hibernate

多谢各位。 html表单

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<body>
<!--Include _menu.html -->
<th:block th:include="/menu"></th:block>
<h1>Person added</h1>

<table border="1">
    <tr>
        <th>ID</th>
        <th>First Name</th>
        <th>Last name</th>
        <th>Third name</th>
        <th>phoneNumber</th>
        <th>date of Birth</th>
        <th>comment</th>
    </tr>
    <!--<td th:utext="${personName}">..</td>-->

    <tr >
        <td th:utext="${person.id_person}">..</td>
        <td th:utext="${person.name}">..</td>
        <td th:utext="${person.surname}">..</td>
        <td th:utext="${person.thirdName}">..</td>
        <td th:utext="${person.phone_number_person}">..</td>
        <td th:utext="${person.date_of_birth}">..</td>
        <td th:utext="${person.comment}">..</td>
    </tr>

    <tr th:each="event : ${person.getEvents()}">
    <td th:utext="${event.getname_event()}">..</td>
</tr>
    <tr th:each="org : ${person.getOrganizations()}">
        <td th:utext="${org.getName_organization()}">..</td>
    </tr>
    <tr th:each="project : ${person.getProjects()}">
        <td th:utext="${project.getName_project()}">..</td>

    </tr>
</table>
<form name='f' th:object="${list}" method='POST'>
    <select >
        <option value="">Select event</option>
        <option th:each="test : ${list}"
                th:value="${test.getname_event()}"
                th:text="${test.getname_event()}">"${test.getname_event()}"</option>
    </select>
    <p><input type="submit" value="Добавить cобытие"></p>
</form>

错误消息表示您正试图访问属性
id\u person
,但
person
对象在模板中具有空引用。您能否确保在控制器中的
onePerson
方法中,
personService.findPerson(id)返回什么?此服务返回的内容通过
model.addAttribute(“person”,person)放入模板中所以这里似乎有一个空值

更新

我假设您的personService下有一些存储库(数据库?)。检查它是否包含您在URL
person/{ID}
中传递的ID下的人


另外,值得检查的是:将参数从
@PathVariable(“id”)int id
更改为
@PathVariable(“id”)String id
,并在将其传递给
findById
之前执行
整数.parseInt(id)
。我不确定Spring是否会自动执行此操作。

错误消息说您正在尝试访问属性
id\u person
,但
person
对象在模板中具有空引用。您能否确保在控制器中的
onePerson
方法中,
personService.findPerson(id)返回什么?此服务返回的内容通过
model.addAttribute(“person”,person)放入模板中所以这里似乎有一个空值

更新

我假设您的personService下有一些存储库(数据库?)。检查它是否包含您在URL
person/{ID}
中传递的ID下的人


另外,值得检查的是:将参数从
@PathVariable(“id”)int id
更改为
@PathVariable(“id”)String id
,并在将其传递给
findById
之前执行
整数.parseInt(id)
。我不确定Spring是否会自动执行此操作。

我创建了一个支持类(Personconnect)来选择id,然后将此id添加到我的方法addEvent中

控制器

@RequestMapping(value = "/person/{id}", method = RequestMethod.POST)
public String onePersonEvent(@PathVariable("id") int id, @ModelAttribute Person person,PersonConnect personcon, Model model) {
    model.addAttribute("person", person );
    model.addAttribute("personcon", personcon );
    Person person1 = personService.findPerson(id);
    person1.addEvent(eventService.findEvent(personcon.getEvent_Id()));
    person1.addOrganization(organizationService.findOrganization(personcon.getOrganization_Id()));
    person1.addProject(projectService.findProject(personcon.getProject_Id()));
    personService.updatePerson(person1);

    return "redirect:/person/" + id;
}

@GetMapping("/person/{id}/edit")
public String showUpdateForm(@PathVariable("id") int id, Model model) {
    Person person = personService.findPerson(id);
    List eventList = eventService.eventList(); //лист эвентов для выпадащего списка
    model.addAttribute("person", person);
    model.addAttribute("list", eventList);

    return "updatePerson";
HTML:


选择事件:
选择项目:
选择组织:

我创建了一个支持类(Personconnect)来选择id,然后将此id添加到我的方法addEvent中

控制器

@RequestMapping(value = "/person/{id}", method = RequestMethod.POST)
public String onePersonEvent(@PathVariable("id") int id, @ModelAttribute Person person,PersonConnect personcon, Model model) {
    model.addAttribute("person", person );
    model.addAttribute("personcon", personcon );
    Person person1 = personService.findPerson(id);
    person1.addEvent(eventService.findEvent(personcon.getEvent_Id()));
    person1.addOrganization(organizationService.findOrganization(personcon.getOrganization_Id()));
    person1.addProject(projectService.findProject(personcon.getProject_Id()));
    personService.updatePerson(person1);

    return "redirect:/person/" + id;
}

@GetMapping("/person/{id}/edit")
public String showUpdateForm(@PathVariable("id") int id, Model model) {
    Person person = personService.findPerson(id);
    List eventList = eventService.eventList(); //лист эвентов для выпадащего списка
    model.addAttribute("person", person);
    model.addAttribute("list", eventList);

    return "updatePerson";
HTML:


选择事件:
选择项目:
选择组织:

您能从控制台添加一些stacktrace吗?我想您还需要从onePerson粘贴更多的代码。htm谢谢您的回答!添加了您要求的内容您能从控制台添加一些stacktrace吗?我认为您还需要从onePerson粘贴更多代码。htmlThank you for answer!添加了您的askedI试图执行的操作,例如“@RequestMapping(value=“/person/{id}”,method=RequestMethod.POST)公共字符串addEventToPerson(@PathVariable(“id”)@ModelAttribute person-person,int-id,Event-Event,Model-Model){Model.addAttribute(“list”,Event);person.addEvent(Event);返回“onePerson”}'并出现新的错误服务器错误,status=50无法将'java.lang.String'转换为所需类型'ru.innovat.models.Person';嵌套的java.la.IlegalStateEx无法将类型为“java.lang.String”的值转换为必需的“ru.innovat.models.Person:找不到匹配的编辑器或转换,发生了什么事?:)你得到Person对象了吗?如果我这样做:'@RequestMapping(value=“/Person/{id}”,method=RequestMethod.POST)公共字符串addEventToPerson(@PathVariable(“id”)@ModelAttribute int-id,Event-Event,Model-Model,Person-Person){Model.addAttribute(“list”,Event);personService.findPerson(id.addEvent);//Person.addEvent(Event);return“onePerson”}它返回一个id为0Ok的空页面,但您引用的是addEventToPerson方法。我要求你们检查方法“publicstringoneperson”。在该方法中,您正在调用personService.findPersonById。我相信它返回空值,这就是我在回答中写的。是的,这是真的,它返回空值,idk如何处理它,无论如何,谢谢;)在onePerson方法findPersonbyid运行良好的情况下,我认为带有metod Post的控制器不起作用,因为我没有正确地向他提供person和Id。我尝试这样做:“@RequestMapping(value=“/person/{Id}”,method=RequestMethod.Post)公共字符串addEventToPerson(@PathVariable(“Id”)@modeldattribute Person,int-id,Event-Event,Model-Model){Model.addAttribute(“list”,Event);Person.addEvent(Event);返回“onePerson”;}”,出现新的错误服务器错误,status=50无法将“java.lang.String”转换为所需的类型“ru.innovator.models.Person”;嵌套的java.la.IlegalStateEx无法将类型为“java.lang.String”的值转换为必需的“ru.innovat.models.Person:找不到匹配的编辑器或转换,发生了什么事?:)D
2019-04-18 13:20:28.765 ERROR 80318 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "person.id_person" (template: "onePerson" - line 27, col 13)] with root cause

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id_person' cannot be found on null
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:209) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:100) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:50) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:368) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:89) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:111) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:334) ~[spring-expression-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:263) ~[thymeleaf-spring5-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:165) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.standard.processor.StandardUtextTagProcessor.doProcess(StandardUtextTagProcessor.java:87) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:136) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:592) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:354) ~[thymeleaf-spring5-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:187) ~[thymeleaf-spring5-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1325) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1069) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1008) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-8.5.28.jar:8.5.28]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
@RequestMapping(value = "/person/{id}", method = RequestMethod.POST)
public String onePersonEvent(@PathVariable("id") int id, @ModelAttribute Person person,PersonConnect personcon, Model model) {
    model.addAttribute("person", person );
    model.addAttribute("personcon", personcon );
    Person person1 = personService.findPerson(id);
    person1.addEvent(eventService.findEvent(personcon.getEvent_Id()));
    person1.addOrganization(organizationService.findOrganization(personcon.getOrganization_Id()));
    person1.addProject(projectService.findProject(personcon.getProject_Id()));
    personService.updatePerson(person1);

    return "redirect:/person/" + id;
}

@GetMapping("/person/{id}/edit")
public String showUpdateForm(@PathVariable("id") int id, Model model) {
    Person person = personService.findPerson(id);
    List eventList = eventService.eventList(); //лист эвентов для выпадащего списка
    model.addAttribute("person", person);
    model.addAttribute("list", eventList);

    return "updatePerson";
<form name='f' th:object="${personcon}" method='POST'>
            <table>
                <tr>
                    <td>Select event:</td>
                    <td>
                        <select th:field="*{event_Id}">
                            <option th:each="event : ${list}"
                                    th:value="${event.id_event}"
                                    th:text="${event.id_event}+' : '+${event.name_event}"></option>
                        </select>

                    </td>
                </tr>
                <tr>
                    <td>Select project:</td>
                    <td>
                        <select th:field="*{project_Id}">
                            <option th:each="project : ${projectlist}"
                                    th:value="${project.id_project}"
                                    th:text="${project.id_project}+' : '+${project.name_project}"></option>
                        </select>

                    </td>
                </tr>
                <tr>
                    <td>Select organization:</td>
                    <td>
                        <select th:field="*{organization_Id}">
                            <option th:each="org : ${orglist}"
                                    th:value="${org.id_organization}"
                                    th:text="${org.id_organization}+' : '+${org.name_organization}"></option>
                        </select>

                    </td>
                </tr>