Spring + Hibernate MVC - 如何让浏览器自动将字符串转换为对象?

时间:2016-01-06 12:59:49

标签: java spring spring-mvc

我正在使用Spring和Hibernate框架做一个java web项目。正如你们许多人所知,在Spring中,在form:form中,我们可以通过@ModelAttribute提交一个对象(如果我理解错了,请为我解释一下)。

<form:form action="student.do" method="GET" commandName="student">
  <form:input path="id"/>
  <form:input path="name"/>
  <form:input path="age"/>
</form:form>

使用此表单,URL将为?id = 1&amp; name = karliekloss&amp; age = 24。这很简单吧? 但是,如果我将另一个对象设置为此类学生对象示例的子项,例如HomeWork,其中包含元素:score,name。所以,如果我在上面执行相同的代码

<form:form action="student.do" method="GET" commandName="student">
  <form:input path="id"/>
  <form:input path="name"/>
  <form:input path="age"/>
  <form:select path="homeWork">
     <form:option itemValue="${value1}"/>
     <form:option itemValue="${value2}"/>
  </form:select>
</form:form>

网址会显示如下?id = 1&amp; name = karliekloss&amp; age = 24&amp; homeWork=model.HomeWork@4f0f43fe,我发现值'model.HomeWork@4f0f43fe'是toString()的结果类HomeWork的功能,我的问题是,如何覆盖toString()或者toString()返回的String的结构是什么,使控制器可以确定Student对象(将HomeWork对象作为子对象),因为它总是返回“客户发送的请求在语法上是不正确的”。 感谢您阅读我的问题,请帮助我!

更新控制器:

@RequestMapping(value = "/student.do", method = RequestMethod.GET)
public String doActions(@ModelAttribute("student") Student student, @RequestParam String action,
        BindingResult result, Map<String, Object> map) {
    switch (action.toLowerCase()) {
        case "add":
            break;
        case "update":
            break;
        case "cancel":
            break;
    }
    return "quantity";
}

1 个答案:

答案 0 :(得分:0)

您应该使用path="homework.score"path="homework.name"将值设置为HomeWork对象中的Student对象,前提是您的字段名称与path属性。这样,您的查询参数将为&homework.score=90&homework.name=math。无需覆盖toString()方法。

            <tr>
                <td>Homework Score:</td>
                <td><form:select path="homework.score"
                        items="${scoreList}" /></td>
            </tr>
            <tr>
                <td>Homework Name:</td>
                <td><form:select path="homework.name"
                        items="${nameList}" /></td>
            </tr>

您只需在控制器中打印这些值即可对此进行测试 - student.getHomeWork().getScore();student.getHomeWork().getName()