Передача объекта из вида в контроллер - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу добавить новое сообщение в базу данных из моих входов .jsp через контроллер.Я попытался просто создать новый объект сообщения в контроллере и поместить его в базу данных, и он работает нормально.Но когда я пытаюсь сделать это, используя входные данные, я получаю сообщение об ошибке:

SEVERE [http-nio-8080-exec-2]org.springframework.web.servlet.tags.form.InputTag.doStartTag Neither   BindingResult nor plain target object for bean name 'message' available as  request attribute
 java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'message' available as request attribute

Мой код:

@Controller
public class DemoController {

@Autowired
UserService userService;

@Autowired
MessageService messageService;

@PostMapping("/messages/sendNewMessage")
public String sendNewMessage(@ModelAttribute("message") MessagesEntity tempMessage) {

    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    tempMessage.setFromUsername(userService.getUser(auth.getName()));

    messageService.sendNewMessage(tempMessage);
    return "redirect:/messages";
}
}

JSP здесь

<form:form action="sendNewMessage" modelAttribute="message" method="POST">

    <table>
        <tbody>
        <tr>
            <td><label>Username:</label></td>
            <td><form:input path="toUsername" /></td>
        </tr>

        <tr>
            <td><label>Subject:</label></td>
            <td><form:input path="subject" /></td>
        </tr>

        <tr>
            <td><label>Content:</label></td>
            <td><form:input path="content" /></td>
        </tr>

        <tr>
            <td><label></label></td>
            <td><input type="submit" value="Send" class="save" /></td>
        </tr>


        </tbody>
    </table>
</form:form>

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Вам необходимо поместить объект MessagesEntity в ModelAttribute.

Либо определить ModelAttribute при загрузке страницы формы, как показано ниже.

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String messageForm(Model model) { 
    model.addAttribute("message", new MessagesEntity()); 
    return "messageFormPageName"; 
}

, либо использовать метод «Метод ниже» в контроллере, который будет обычнымдля полного контроллера, поэтому ModelAttribute будет доступен всегда.

@ModelAttribute("message")
public MessagesEntity createModel() {
    return new MessagesEntity();
}
0 голосов
/ 24 декабря 2018

вы используете URL-адрес действия как sendNewMessage в представлении jsp, но в контроллере это /messages/sendNewMessage.

...