spring接收从页面传回的enum问题

xun_2008 2012-03-29 05:24:16
model

@Entity
@Table(name = "tbl_role_header")
public class Role {

private String id;
private String code;
private String name;
private RoleType roleType;
//getter setter
}

public enum RoleType {
/**
* 1.role.
*/
ROLE(1),

/**
* 2.group.
*/
GROUP(2);

private int roleType;

private RoleType(int roleType){
this.setRoleType(roleType);
}

public int getRoleType() {
return roleType;
}

public void setRoleType(int roleType) {
this.roleType = roleType;
}
}


JS页面文件

function saveRole() {
var roleNo = $('#roleNo').val();
var roleType = $('#roleType').val(); //roleType的值为1或2
var roleName = $('#roleName').val();
var roleActive = $('#roleActive').val();

if(roleNo == null || roleName == null) {
$.messager.alert('提示','角色代號和角色名稱不能為空!','info');
return;
}
var active = 0;
if(roleActive == 'on') {
active = 1;
}

var roleDesc = $('#roleDesc').val();

var rows = $('#tblRoles').datagrid('getRows');
var roleMembers = new Array();
for(var i=0; i<rows.length; i++) {
var employee = {'employeeId':rows[i].empNo,
'name':rows[i].empName};
var member = {'member':employee,'remark':rows[i].remark};
roleMembers.push(member);
}
var data = {'code':roleNo,'roleType':roleType,'name':roleName, 'active':active,'remark':roleDesc,'roleMembers':roleMembers};
$.ajax({
type:'post',
url:'save_role',
data:JSON.stringify(data),
contentType: "application/json",
success:function(data){
$.messager.alert('提示',data.message,'info');
window.location.href= "list";
},
error:function(data){
$.messager.alert('提示',data.responseText,'info');
}
});
}


controller

@RequestMapping(value="/save_role", method=RequestMethod.POST)
@ResponseBody
public Map<String, String> addRole(@RequestBody Role role){
Map<String, String> result = new HashMap<String, String>();
try {
List<Role> rs = testGetRoles();
//List<Role> rs = roleService.getAll(Role.class);
for(Role r : rs) {
if(r.getCode().equals(role.getCode())) {
result.put("message", "已存在同樣的角色代號,不可重覆新增!");
return result;
}
}

roleService.save(role);
result.put("message", "操作成功!");
} catch (Exception ex){
ex.printStackTrace();
result.put("message", "操作失败!");
}

return result;
}


-------------------------------------------------------------------------
报错如下:
2012-03-29 09:52:02.102:WARN::/bpm.web/roles/save_role: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of bpm.core.model.org.RoleType from String value '2': value not one of declared Enum instance names| at [Source: org.mortbay.jetty.HttpParser$Input@c8b9ac; line: 1, column: 14] (through reference chain: bpm.core.model.org.Role["roleType"])

问题描述:
一个对象包含一个enum对象,如何将该对象从页面传回controller

不知你们遇到类似的问题没?
...全文
276 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xun_2007 2012-03-30
  • 打赏
  • 举报
回复
多謝了,這樣就OK了

var type = '';
if(roleType == 1)
type = 'ROLE';
else if(roleType == 2)
type = 'GROUP';
xun_2008 2012-03-30
  • 打赏
  • 举报
回复
問題解決了,

var type = '';
if(roleType == 1)
type = 'ROLE';
else if(roleType == 2)
type = 'GROUP';

其實很簡單,spring json傳遞enum類型數據是傳遞如'ROLE',而不是'ROLE'在DB對應的值“1”,只要在頁面做一下轉換就好了。這個發現來源於看到spring json傳到頁面的enum類型的值是'ROLE'。
O(∩_∩)O哈哈~
xun_2008 2012-03-29
  • 打赏
  • 举报
回复
自己顶一下先,问题注意在enum,本想添加颜色,但貌似不能再代码里设置颜色,望各位帮帮忙丫,项目敢做中。。。。。。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧