在 Spring MVC 中将参数从 JSP 传递到控制器

2022-09-04 06:11:06

我正在尝试使用Spring MVC注释控制器的示例项目。到目前为止,我在网上找到的所有示例都将JSP绑定到特定模型,控制器用于在处理程序方法中检索模型对象。@ModelAttribute

如何将其他参数(不存在于 Model 对象中)从 JSP 传递到控制器?我使用JavaScript来做到这一点吗?也可以有人澄清对象应该用于什么。HttpServletRequest

谢谢。


答案 1

只需从 jsp 输入标记中删除“路径”,然后使用 HttpServletRequest 检索剩余数据即可。

例如,我有一个像豆子

public class SomeData {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

然后在jsp中,我将有额外的数据字段以正常的html标签发送

<form:form method="post" action="somepage" commandName="somedata">
    <table>
    <tr>
        <td>name</td>
        <td><form:input path="name" /></td>
    </tr>
    <tr>
        <td>age</td>
        <!--Notice, this is normal html tag, will not be bound to an object -->
        <td><input name="age" type="text"/></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="send"/>
        </td>
    </tr>
</table>
</form:form>

请注意,somedata bean 具有 age 不是的名称字段。因此,添加的年龄字段没有“路径”。如果没有 path 属性,对象属性将不会绑定到此字段。

在控制器上,我将不得不使用HttpServletRequest,例如,

@RequestMapping("/somepage")
public String someAction(@ModelAttribute("somedata") SomeData data, Map<String, Object> map,
                                HttpServletRequest request) {

       System.out.println("Name=" + data.getName() + " age=" + request.getParameter("age"));

       /* do some process and send back the data */
        map.put("somedata", data);
        map.put("age", request.getParameter("age"));

        return "somepage";
   }

在访问视图上的数据时,

<table>
    <tr>
        <td>name</td>
        <td>${somedata.name}</td>
    </tr>
    <tr>
        <td>age</td>
        <td>${age}</td>
    </tr>
 </table>

somedata 是提供 name 属性的 bean,age 由控制器显式设置属性。


答案 2

如果一个人不想创建另一个类(bean),尽管它应该在那里,那么除了一个也可以使用.@ModelAttrbute@RequestParam

public String someAction(@RequestParam("somedata") String data)
{
------
}

推荐