spring mvc 表单提交时存在实体属性问题。

岽茗 发布于 2015/12/08 14:49
阅读 1K+
收藏 0
spring mvc 表单提交时存在实体属性问题。


商品Goods的表单中包涵一个所属品牌Brand的信息
------Entity------------------------------
public class Goods extends IdEntity {
/**
* 商品所属品牌
*/
private Brand brand;


@JsonIgnore
@ManyToOne(targetEntity = Brand.class)
@JoinColumn(name = "brand_id")
public Brand getBrand() {
return brand;
}


-------页面表单中内容-----------
<label for="goods_brand" class="col-md-1 control-label">所属品牌:</label>
<div class="col-md-5">
<input type="text" id="goods_brand" name="brand" class="form-control" placeholder="输入品牌"/>
</div>


ajax保存如下:
$.ajax({
type: 'POST',
url: '${ctx}/goods/create?' + $("#goodsForm").serialize(),




调试看到提交的url:
Request URL:http://localhost:8080/crm/goods/create?id=0
&name=%E8%80%90%E5%85%8B%E8%BD%BB%E7%9B%88%E8%B7%91%E9%9E%8B
&activated=1
&qpName=NaiKeQingYingPaoXie
&jpName=NKQYPX
&brand=%E8%80%90%E5%85%8B
&brand_primary_key=7


$("#goodsForm").serialize() 中包涵 &brand=%E8%80%90%E5%85%8B&brand_primary_key=7
商品的url里有brand的原因:表单中有 name="brand"
商品的url里有brand_primary_key的原因:我使用插件jquery.ajax-combobox,如下:
$("#goods_brand").ajaxComboBox("${ctx}/brand/comboboxlist", {
lang: 'cn',
button_img: '${ctx}/static/jquery.ajax-combobox-7.4.4/images/btn.png',
per_page: 5,
navi_num: 5,
primary_key: 'id',
});


---------------后台controller代码---------
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> create(Goods newGoods) {
}


============问题:
如果前台去掉 所属品牌 的话,url: '${ctx}/goods/create?' + $("#goodsForm").serialize(),
中的  $("#goodsForm").serialize() 可以正确的绑定到create方法的Goods类型的参数里,


但加上所属品牌,就不行了,根本进入不到create方法中。


请问这种情况(一个实体的属性为另外一个实体)下,怎么处理。








加载中
0
岽茗
岽茗
在线等。。。。难道需要 手动 将url: '${ctx}/goods/create?' + $("#goodsForm").serialize(), 中的 brand和brand_primary_key 去掉?然后再给create方法传递个 brandId 参数?
0
妹子楼顶有鸽子
妹子楼顶有鸽子
name设置为:brand.属性
0
岽茗
岽茗

引用来自“Stay灬调调”的评论

name设置为:brand.属性
我试了,这样的话, &串里就出现了 brand.id= 和 brand.id_primary_key,还是不行。无法调用create方法。
0
岽茗
岽茗
真无语了,真得手动把url里的“brand.id_primary_key”去掉,并把“brand.id_primary_key”的值(id)赋值给brand.id






<label for="goods_brand" class="col-md-1 control-label">所属品牌:</label>
<div class="col-md-5">
<input type="text" id="goods_brand" name="brand.id" class="form-control" placeholder="输入品牌"/>
</div>




$("#goods_brand").ajaxComboBox("${ctx}/brand/comboboxlist", {
lang: 'cn',
button_img: '${ctx}/static/jquery.ajax-combobox-7.4.4/images/btn.png',
per_page: 5,
navi_num: 5,
sub_info: true,
primary_key: 'id',
});


想上面这样,提交的串里是 比如:brand.id=劲霸男装 brand.id_primary_key=9


0
zoemak
zoemak

品牌的name应该是你实体里面:Brand brand;这个的id,brand.id,其他的属性也类似这样传参。

还有,你这个编码习惯不大好啊,post应该用form传参,不要用url参数。

$.ajax({
type: 'POST',
url: '${ctx}/goods/create',
data:$("#goodsForm").serialize()
});



0
Leonds
Leonds
建议和view层交互的时候不要直接用Entity,应该再建个DTO,操作会方便很多
0
百世经纶之傲笑红尘
百世经纶之傲笑红尘
form传过来的和你的Entity里自己定义的set,get里的name对应不上,这问题大吗,不大,小吗,不小,都是野鸡惹的或
百世经纶之傲笑红尘
百世经纶之傲笑红尘
建立中间映射层
0
岽茗
岽茗

引用来自“zoemak”的评论

品牌的name应该是你实体里面:Brand brand;这个的id,brand.id,其他的属性也类似这样传参。

还有,你这个编码习惯不大好啊,post应该用form传参,不要用url参数。

$.ajax({
type: 'POST',
url: '${ctx}/goods/create',
data:$("#goodsForm").serialize()
});



非常感谢,
0
岽茗
岽茗

引用来自“吝惜木川”的评论

建议和view层交互的时候不要直接用Entity,应该再建个DTO,操作会方便很多
好的。
返回顶部
顶部