【问题标题】:Passing an object from view to controller将对象从视图传递到控制器
【发布时间】:2018-12-24 12:49:12
【问题描述】:

我想通过控制器从我的 .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>

【问题讨论】:

    标签: spring-mvc jsp controller


    【解决方案1】:

    您在 jsp 视图中将操作 url 用作 sendNewMessage,但在控制器中,它是 /messages/sendNewMessage

    【讨论】:

    • 是的,你是对的,我的错。我以前尝试过很多东西,但忘了改变它。改了之后问题还是一样。
    • @PaulSmith 我尝试了您的代码,只是使用简单的文本元素删除带有输入字段的表属性,即&lt;input type="text" name="toUsername"&gt; 和其他两个。通过更正 url**],modelAttribute[** 一切正常。我可以建议更多的是,如果您想提交表格数据或通过 ajax 调用提交,您可以解析表格数据。那会容易得多。
    • 我想我知道问题可能出在哪里。 “toUsername”实际上不是纯文本,而是用户实体。无论如何,我不知道如何通过 jsp 文件中的用户名获取用户实体。
    【解决方案2】:

    您需要将 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多