学习SpringMVC(八)之ModelAttribute

首先,介绍下ModelAttribute的作用:

1.用@ModelAttribute修饰的方法,将再目标方法被调用前进行调用

2.可以解决这样一个问题:用户在提交表单时候,要求可以对用户名进行修改,但是密码不允许修改,这样在提交之后,在目标方法中的入参对象,将自动对用户名进行填充修改,但是这时候发现密码变为NULL,因为没有对密码传值,但是要求密码为原来用户的密码不变。

       2.1 可以通过查询数据库的信息,再密码传递过来

       2.2 也可以使用@ModelAttribute来解决这个问题

3.下面来看个案例

在index.jsp中:

<span style="font-family:SimSun;font-size:18px;"><form action="springmvc/testModelAttribute" method="post">
   <input type="hidden" name="id" value="1">
  	username:<input type="text" name="name" value="CGF">
  	<input type="submit" value="提交">
  </form></span>

在controller中:

<span style="font-family:SimSun;font-size:18px;">import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.cgf.springmvc.entities.User;
import com.sun.org.glassfish.gmbal.ParameterNames;

@RequestMapping(value="/springmvc")
@Controller
public class MyModelAttribute {	
	public final String viewname="success";
	
	@ModelAttribute
	public void updateUser(@RequestParam(value="id",required=false)Integer id,
			Map<String,Object> map){
		if(id!=null){
			User user=new User(1,"cgf2016", "123456");  //模拟从数据库中获取数据
			System.out.println("模拟从数据库中获取数据:"+user);
			map.put("user", user);
		}
	}	
	@RequestMapping(value="/testModelAttribute")
	public String testModelAttribute(User user1){
		System.out.println("testModelAttribute修改后:"+user1);
		return viewname;
	}

}</span>
这样就可以解决上述的问题

注意:map.put("user", user);   中的键user,应该为testModelAttribute(User user1)中的User的首字母小写
4.该案例的运行流程:

4.1 执行@ModelAttribute修饰的方法,把user,放到map当中

4.2 SpringMVC从map中取出User对象,然后把表单的请求参数附给User对象的属性值

4.3 SpringMVC将上述的对象传入目标方法当中





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值