【问题标题】:Concept of Two-Way data binding in Spring MVCSpring MVC 中双向数据绑定的概念
【发布时间】:2020-10-22 00:32:17
【问题描述】:

这是我的 login.jsp 文件。

<form:form method="POST" action="checklogin" modelAttribute="log">

        <form:label path="username">UserName: </form:label> 
        <form:input path="username" id="username" /><br /><br />
        <br /> 
        <form:label path="pswd">Password: </form:label>
          
         <form:password path="pswd" id="password" /><br /> <br />
        <br /> 
        <input type="submit" id="btnLogin" value=login class="login" />
</form:form>

这是我的控制器

@RequestMapping(value = "/checklogin", method=RequestMethod.POST)
    public String chklogin(@ModelAttribute Login login, Model mod) {    

        if (login.getUsername().equals("subro") && login.getpswd().equals("ss")) {
            mod.addAttribute("log",login);
            return "Home";
        }
        else {
            return "Login";
        }
    }

我仍然收到错误消息 Bean 名称“log”的 BindingResult 和普通目标对象都不能用作请求属性

【问题讨论】:

  • 请任何人澄清我的疑问,因为我无法理解双向绑定的主题。
  • 在你的表单中你有modelAttribute="log"在你的代码中有@ModelAttribute Login login。所以它应该被命名为login 而不是log 或在@ModelAttribute 中指定name 属性以匹配表单中的属性。
  • 我已经更改了 modelAttribute="login" 但仍然无法正常工作。
  • 因为在@GetMapping 中您可能也使用了错误的名称。
  • 请不要多次问同一个问题!

标签: spring spring-mvc controller modelattribute two-way-binding


【解决方案1】:

改变

@ModelAttribute Login login

@ModelAttribute Login log

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

spring 中的双向数据绑定允许用户输入动态绑定到 bean。从某种意义上说,它是双向的,它可以从 bean 获取输入,并且可以使用 GET 和 POST api 将用户输入发布到 bean。

使用 @ModelAttribute 注释,您可以将用户输入与 bean 绑定。

@RequestMapping(value = "/login", method=RequestMethod.GET)
public String login(@ModelAttribute Login log){ //one-way binding
   return "Login";
}

@RequestMapping(value = "/checklogin", method=RequestMethod.POST)
public String chklogin(@ModelAttribute Login log, Model mod) {  //two-way binding

   if (login.getUsername().equals("subro") && login.getpswd().equals("ss")) {
       mod.addAttribute("log",login);
       return "Home";
   }
   else  return "Error";
        
}

之前我没有写过登录方法,它映射到url/login

当您收到“BindingResult 或 bean 名称 'log' 的普通目标对象都不能用作请求属性”这样的错误时,这意味着 bean(在我的例子中是 'log')无法与视图绑定页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多