Spring mvc 从jsp传递参数到后台控制器中,传递的参数如何封装成一个对象

jsp部分 : 就是一个form表单,表单参数有 name , createDate, Description 这三个参数

pojo 部分: 一个实体类client 中有这三个属性
controller部分代码:

@RequestMapping("clientAdd")
public String clientAdd(Client client){
System.out.println(client.getName()+"=============000");
return "redirect:../../api/go/login";



问题: 为什么 打印出来的名字为空,也是说没有把直set到client中 ,错误在那里,因该怎样解决 ,请给位大神棒棒忙 ,着急中

你对name这个属性有没有Set、get方法,没有的话注入不了,所以name属性就空追问

set .get 有的

追答

client有没有匹配好。没有的话这个对象空的。怎么会有东西

追问

是set和get方法的名字匹配吗? ,如果是的话,方法名式匹配好了的 如:setName(String name)

追答

你网页是不是有一个client的东西,然后把这些数据传到你类里的client对象,你中间通过什么?annotation还是xml还是其他方式。如果没有中间这个过渡,你类里的client永远时空。

追问

我的网页里没有一个client ,是一个普通的form表单 ,至于中间经过什么,就是spring mvc 的一些配置 ,中间经过什么不是很懂 ,

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-10
表单中的name名称改为client.name追问

试过了 ,还是没有数据进去 ,

追答

楼上说的是对的,需要一个中间层来交互,其中一种实现方式(放父类里),自己显式调用绑定
/**
* Spring MVC
*
* @return
* @see #preBind(HttpServletRequest,Object,ServletRequestDataBinder)
*/
protected BindingResult bindObject(HttpServletRequest request,
Object command) throws Exception {
ServletRequestDataBinder binder = createBinder(request, command);
preBind(request, command, binder);
binder.bind(request);
Validator[] validators = getValidators();
if (validators != null) {
for (Validator validator : validators) {
if (validator.supports(command.getClass())) {
ValidationUtils.invokeValidator(validator, command, binder
.getBindingResult());
}
}
}
return binder.getBindingResult();
}

追问

这个中间层需要自己写吗? 不会自动注入吗?

追答

刚才试了下,是可以正常反射到表单里面的值的,检查下你的配置和form表单里面的name命名是否一一对应,给个参考你:
htt“去掉我”p://www.cnblogs.com/xd502djj/archive/2013/08/08/3245485.html

追问

能否给我看看你的配置 可以吗? 应该是配置错误导致的

追答

关键配置应该就这几个,mvc响应模式根据自己需要来,我用的ControllerClassNameHandlerMapping

追问

谢谢

本回答被提问者采纳
第2个回答  2013-10-10
直接接受这三个参数在赋值给你的pojo也行!追问

直接复直是可以的 ,但是如果参数表多,这样感觉代码不简练

相似回答