springmvc的参数绑定:
当一个页面点击修改会带走一个参数id
即jsp的这个参数id
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
而Conrtroller层会有一个修改方法(参数id),通过这个参数id会知道改哪条数据;
而这个参数id只能是形参式的,而不能是成员变量式的。
因为如果是成员变量式的,每条进程来修改都会改变这个参数id,会引起冲突,对其他进程有影响
单例模式下处理多线程:
默认参数绑定:即原始servlet开发
service层:
public interface ItemService {
public Items selectbyid(Integer id);
}
@Service
public class ItemServiceimpl implements ItemService {
@Autowired
private ItemsMapper itemsMapper;
@Override
public Items selectbyid(Integer id) {
return itemsMapper.selectByPrimaryKey(id);
}
controller层
@Controller
public class controllertest {
@Autowired
private ItemService itemService;
@RequestMapping("itemEdit")
public ModelAndView to(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
servlet开发
String id = request.getParameter("id");
Items items = itemService.selectbyid(Integer.parseInt(id));
/* Items items = itemService.selectbyid(id);*/
ModelAndView View = new ModelAndView();
View.addObject("item", items);
View.setViewName("editItem");
return View;
}
简单类型参数绑定:适用于查询(select)
只改controller层:在参数上加上Integer id/string/float/double/boolean,
具体根据id=${item.id},也就是取决pojo类中的类型
参数名Integer id要与id=${item.id}要一致
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
@Controller
public class controllertest {
@Autowired
private ItemService itemService;
@RequestMapping("itemEdit")
public ModelAndView to(Integer id,HttpServletRequest request, HttpServletResponse response, HttpSession session) {
Items items = itemService.selectbyid(id);
ModelAndView View = new ModelAndView();
View.addObject("item", items);
View.setViewName("editItem");
return View;
}
参数绑定之pojo:适用于更改数据(update)
因为更改数据不可能只带来一个数据,肯定包含各种各样的数据库表的数据类型
要求:
jsp页面的input标签中name=“属性名”,要与pojo类的属性名要一致
service层;
public interface ItemService {
public void update(Items items);
}
@Service
public class ItemServiceimpl implements ItemService {
@Autowired
private ItemsMapper itemsMapper;
@Override
public void update(Items items) {
items.setCreatetime(new Date());
itemsMapper.updateByPrimaryKeyWithBLOBs(items);
}
controller层:
@Controller
public class controllertest {
@Autowired
private ItemService itemService;
@RequestMapping("updateitem")
/**
*<form id="itemForm" action="${pageContext.request.contextPath }/updateitem.action" method="post">
* 经过提交页面,action直接到这个RequestMapping,实行这段代码
*/
public ModelAndView update(Items items) {
itemService.update(items);
ModelAndView View = new ModelAndView();
/**
* 将pojo的值存到页面,并取名为item好方便传值
* 想相当于request.setattribute(),存数据只放到request作用域中
*/
View.addObject("item", items);
/**
* 跳转到某页面去
*/
View.setViewName("success");
return View;
/**
* 问题:
* 页面跳转成功,但是数据插入不到数据库里去
* 解决:
* editItem.jsp中input标签的name="pojo类的属性名要一 一对 应" 而el表法式的${item.id/name/...},则是 View.addObject("item", items);的作用,具体请看el
*/
}
参数绑定之包装pojo
就是建立一个包装类,把pojo类注入,set/get
然后把参数换成Query vo即可,那么jsp页面input标签中name=“items.name/Date”
参数绑定之自定义绑定
例如日期;我想定义一个
yyyy:MM-dd HH_mm-ss这种类型的日期
但是日期没有这种格式,所以自定义
在springmvc.xml中的处理器适配器中 配置 转换工厂,在转换工厂中配置具体要转换的东西
<mvc:annotation-driven conversion-service="formattingConversionServiceFactoryBean"/>
<!--配置转换器的工厂-->
<bean id="formattingConversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!--配置转换器-->
<property name="converters">
<list>
<!--转换日期类型-->
<bean class="com.ssm.conversion.DateConveter"/>
</list>
</property>
</bean>
需要创建一个转换日期的自定义的类:
1.实现Conver接口
S:页面传回来的类型:string
T:传出去的类型:日期date
将页面接收到的string类型格式识别,然后转成日期类型
public class DateConveter implements Converter<String, Date> {
@Override
public Date convert(String s) {
try {
if (s != null) {
DateFormat dateFormat = new SimpleDateFormat("yyyy:MM-dd HH_mm-ss");
return dateFormat.parse(s);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}