【问题标题】:ModelAttribute Values are not populating valuesModelAttribute 值未填充值
【发布时间】:2015-09-13 20:45:29
【问题描述】:

我有一个如下所示的表格

    <!DOCTYPE html>
<html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<head>
    <meta charset="utf-8" />
    <title>Dealer Details</title>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
    <link href="css/app.css" rel="stylesheet" />
    <script src="//code.jquery.com/jquery-2.0.3.min.js"></script>
    <script type="text/javascript">
        function onChange() {
            var value = ($("#jsonTextArea").text());
            alert(value);
            document.getElementById("jsonTextHidden").value = value;
        };
    </script>
</head>
<body class="body-bg">
    <form modelAttribute="jsonString" method="post" action="postHome">
        <div class="container">
            <div class="col-sm-8 col-sm-offset-2">
                <div class="row">
                    <div class="col-md-6 col-md-offset-3">
                        <div class="centerediv">
                            <div class="panel panel-default">
                                <div class="panel-heading">
                                    <h3 class="panel-title">Select Home</h3>
                                </div>
                                <div class="panel-body">
                                    <div class="form-group">
                                        <textarea rows="4" cols="40" name="jsonTextArea"></textarea>
                                    </div>
                                    <input class="btn btn-danger" type="button" value="Cancel">
                                    <input class="btn btn-success" type="submit" value="Ok" onclick="onChange();">
                                    <input type=hidden id="jsonTextHidden" name="jsonTextHiddenField" />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form>
</body>
</html>

我有一个如下所示的控制器类。

@Controller
public class HomeController {

    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public String callHomePage() {
        return "home";
    }

    @POST
    @Consumes({MediaType.APPLICATION_XML})
    @RequestMapping(value = "/postHome")
    public ModelAndView postHomeList(@ModelAttribute("jsonString") HomeRequest request, @Context HttpServletRequest servletReq, @Context HttpServletResponse servletRes) {
        ModelAndView mav = null;
        System.out.println(request.getHomeId());
        return mav;
    }

}

在这个 home.jsp 中有一个 textarea 字段,我可以在其中输入一些值(json 字符串)。提交后 request.getHomeId() 的值为 null。谁能帮我解决这个问题?

【问题讨论】:

  • 请显示完整的&lt;form&gt;code。
  • 编辑问题并添加。
  • 你还没有将jsp中的任何字段赋值给homeId属性
  • 我是初学者,对这个概念不确定。我尝试通过 REST 控制台处理 Json 请求,当我使用 @RequestBody 时它运行良好。类似的方式我想在 HomeRequest 请求对象中获取字符串,有什么方法可以做到这一点,或者我应该在 jsp 本身中解析 json 并将其添加到对象中。

标签: java jsp spring-mvc modelattribute


【解决方案1】:
  1. 创建 HomeRequestDTO 例如

    public class HomeRequestDto {
      private Integer homeId;
      private String homeName;
     //your getter and setter
    }
    

2.

@RequestMapping(value = "/home", method = RequestMethod.GET)
public String callHomePage(final Model model) {
    HomeRequestDto home = new HomeRequestDto();
    home.setHomeName("Princess Home");
    home.setHomeId(123);
    model.addAttribute("homeRequest", home);
    return "home";
}

3。 你的 home.jsp

<form:form commandName="homeRequest" name="homeRequest" method="post" enctype="multipart/form-data" action="postHome" >

<spring:bind path="homeRequest.homeName">
    <form:textarea maxlength="100" path="${status.expression}"/>
</spring:bind>
<spring:bind path="homeRequest.homeId">
   <form:textarea maxlength="100" path="${status.expression}"/>
</spring:bind>              
<input type="submit" value="Submit" />          

4.关于提交你的控制器

@POST
@RequestMapping(value = "/postHome")
public String postHomeList(@ModelAttribute HomeRequestDto home,
        @Context HttpServletRequest servletReq, @Context HttpServletResponse servletRes) {
    System.out.println(home.getHomeId());
    System.out.println(home.getHomeName());
    return "home";
}

【讨论】:

  • 谢谢 csarathe。这里我还有一个问题。我有一个 json 字符串,我将从一个 textArea 中获取它,然后需要对其进行解析。当我使用@RequestBody 时,它工作正常。对于 REST 端点 QueryParam 也在工作。但同样,ModelAttribute 不起作用。
  • 请检查ModelAttribute和RequestBody的区别stackoverflow.com/questions/13229584/…
  • ModelAttribute绑定Form,RequestBody引用提交的数据。
猜你喜欢
  • 2013-11-05
  • 2016-07-11
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2014-01-30
  • 2013-08-03
相关资源
最近更新 更多