日期:2014-05-17  浏览次数:20679 次

对Spring MVC有一定了解的积极讨论一下
网上查到使用spring mvc开发的项目超少。最近想用它代替struts,遇到不少问题,希望各位能互相交流一下。

需求1:要进行产品分页显示的时候,要在表单加入一个隐藏字段保存参数当前页,使用<form:hidden path="currentpage"/>(使用form标签也是为了绑定保存),但产品的属性不应该设计有当前页属性(这属性持久化到数据库没用,使用@Transient也别扭),没有这属性的话绑定不了,表单显示会出错。

我现在的方法只能是再建一个productform这里面就可以封装所需的属性(包括当前页),这就像struts的formbean,struts也可以这样使用模型驱动。但这显有点冗余。这个productform的属性与domain层设计的实体的属性和set、get方法很多重复,心里不爽。

需求2:
类产品(ProductInfo)与类产品样式(ProductStyle)是一对多关系,具体一个产品对应1到多个产品样式,具体一个产品样式对应一个产品,想在一个页面保存一个产品的同时,也保存多个样式。

页面:
按提交时,产品的所有属性(除了Set<ProductStyle> productStyles)封装到productInfo,产品样式一的所有属性封装到productStyle1,产品样式二的所有属性封装到productStyle2,然后两个产品添加到Set<ProductStyle> productStyles,然后再提交转到Controller的方法:
public void addProduct(ProductInfo product,Set<ProductStyle> productStyles){
product.setProductStyles(productStyles);//将两样产品样式都添加到产品的productStyles属性
productService.save(product);//保存产品同时也保存两种产品样式
}


或者再来直接一点,在按提交时,所有属性(包含Set<ProductStyle> productStyles都已添加所有的样式)一起封装到product,转到Controller的方法:
public void addProduct(ProductInfo product){
productService.save(product);//保存产品同时也保存两种产品样式
}
这个写页面时又怎么绑定字段????

但好像现在spring mvc不支持多个对象绑定提交,没法实现。现在我就只能在一个页面保存一个产品的基本属性,再在一个页面一个保存样式,多一个样式,再在一个页面保存一次。多麻烦!

对于这两种需求各位有没有好的办法,发表一下。

------解决方案--------------------
不是什么结构都能随便绑定的,比如你这个Set,spring默认是没法绑定的。
第一个问题:这个可以从Request来获取,或者干脆给spring Controller的处理方法增加一个int page的参数,用它来直接获得当前页号,如果第一此访问不会有这个值,用Integer类型即可,它允许为null。
需求2里面的处理和转交,我不知道你怎么做的,
public void addProduct(ProductInfo product,Set<ProductStyle> productStyles),这就是个普通的方法吗?不响应页面请求?
你说的我想大概是绑定数组的概念,直接用数组参数就可以,比如
public void addProduct(ProductInfo product,int productStyle[])
productStyle也就是你页面的控件名称。它们的值就是productStyle的ID
不知道这样能否满足你的要求