Spring+Hibernate 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&name=karliekloss&年龄=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>

URL会这样显示吗?id=1&name=karliekloss&年龄=24&在家工作=model.HomeWork@4f0f43fe,我发现model.HomeWork@4f0f43fe'是类HomeWork的toString()函数的结果,我的问题是,如何重写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";
}

您应该使用path="homework.score"path="homework.name"来设置Student对象中HomeWork对象的值,前提是您的字段名称与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()

最新更新