这个问题是在项目中需要做一个用户设置表时遇到的
顺便也可以提一下数据库表设计用户设置表的一种设计思想,
下面把用户设置表的SQL也贴出来供大家参考:
CREATE TABLE `me_user_settings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`meta_key` varchar(255) NOT NULL DEFAULT '0' COMMENT '我的项目通知',
`meta_value` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT '新消息通知',
`user_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
只需要这四个字段。key表示要设置的项,value表示状态:0关闭;1开启;
这样设计的好处就是有几个功能就添加几条数据,方便以后拓展功能,还有不同用户类型功能不同也可以解决,机动性很好。
回归主题,由于这样设计表所以要完成一次添加多条数据,一开始想的是用逻辑代码判断没开启就赋值,这样代码冗余度高,耦合性又不好。
所以想到前台直接传一个数组然后一个for循环就实现了。
先看Html代码:
userSetting.jsp(只截取了代码片段)
<input type="hidden" name="userSettings[0].userId" value=<shiro:principal property="id"/> />
<input type="hidden" name="userSettings[0].metaKey" value="newMessage"/>
<input type="checkbox" class="checkbox" value="1" id="inform1" name="userSettings[0].metaValue" checked />
<label for="inform1">新消息通知</label>
<input type="hidden" name="userSettings[1].userId" value=<shiro:principal property="id"/> />
<input type="hidden" name="userSettings[1].metaKey" value="myAttention"/>
<input type="checkbox" class="checkbox" value="1" id="inform2" name="userSettings[1].metaValue"/>
<label for="inform2">站内信通知</label>
下面是JAVA代码:
userSetting.java
public class UserSetting {
private Integer id;
private Integer userId;
private String metaKey;
private int metaValue;
/*getter and setter*/
}
UserSettingController.java
@RequestMapping(value = "/update/setting",method = RequestMethod.POST)
public ResponseEntity<HttpEntity> updateUserSetting(@RequestBody UserSettingsList userSettings){
log.debug(userSettings);
List<UserSetting> settings = userSettings.getUserSettings();
for (int i = 0; i < settings.size(); i++) {
log.debug(settings.get(i).getMetaKey());
}
return new ResponseEntity(userSettings,HttpStatus.OK);
}
这里用@RequestParam是不能获取的,最后想到用@RequestBody获取,但是要将List<UserSetting> 封装一下,这里是关键
UserSettingsList.java
public class UserSettingsList{
private List<UserSetting> userSettings;
public UserSettingsList (){}
public List<UserSetting> getUserSettings() {
return userSettings;
}
public void setUserSettings(List<UserSetting> userSettings) {
this.userSettings = userSettings;
}
}
这样就可以从后台直接获取一个复杂型List<Object>
只是做一下工作笔记,希望对大家有帮助,欢迎讨论。
Zemo手打,转载标明出处:http://blog.csdn.net/zemochen/article/details/17965689