我是Spring新手并尝试在表中填充用户详细信息,该表将显示系统用户的一些基本信息 表的结构是
Linux fatdog64-e6c 3.18.7 #1 SMP Mon Nov 16 01:58:11 WIB 2015 x86_64 GNU/Linux
我正在使用Spring 4和Hibernate 4。
我的模型类
Firstname Lastname Email Phone Number Role State
我的用户列表的控制器方法
@Entity
@Table(name = "USERS")
public class User {
@Id
@Column(name = "USER_ID")
private String userId;
@Column(name = "PASSWORD")
private String password;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "MIDDLE_NAME")
private String middleName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "EMAIL")
private String email;
@Column(name = "PHONE")
private String phone;
@Column(name = "STATE")
private int state=State.ACTIVE.getState();
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USER_ROLE_MAP", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = {
@JoinColumn(name = "ROLE_ID") })
private Set<Role> blogRoles = new HashSet<>();
/*getters and setter and other utility methods are remove*/
我的Jsp代码显示用户列表数据
@RequestMapping(value = "/listUser", method = RequestMethod.GET)
public ModelAndView showAllUsers() {
System.out.println("start login");
ModelAndView modelAndView=new ModelAndView("listUser");
List<User> userList=userService.findAll();
System.out.println("user List controler "+userList);
modelAndView.addObject("currentUser", getPrincipal());
modelAndView.addObject("userList", userList);
return modelAndView;
}
现在我有一个枚举,其中包含有关用户状态的信息
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.firstName}</td>
<td>${user.lastName}</td>
<td>${user.email}</td>
<td>${user.phone}</td>
<td>
<c:forEach items="${user.blogRoles}" var="role">
${role.roleType}
</c:forEach>
</td>
<td>${user.state}</td>
</tr>
</c:forEach>
在JSP中,public enum State {
ACTIVE(1), INACTIVE(2), LOCKED(3), DELETED(4);
private int state;
private State(int state) {
this.state = state;
}
public int getState() {
return state;
}
@Override
public String toString(){
return this.name();
}
public String getName(){
return this.name();
}
}
为整数
我想显示state
,对应于name
的字符串值,它是一个由spring注入的整数,并由来自DB的hibernate提取。
我知道有一些方法可以实现,就像我可以从枚举创建一个地图并将其对象发送到JSP或定义我自己的自定义顶级域名。
但我对这些解决方案仍然不满意,有没有更好的方法以更标准的方式显示价值或使用弹簧和EL的某些功能?
任何建议和帮助都会有所帮助,谢谢。
答案 0 :(得分:0)
这是让它发挥作用的一种方法。在User
类中,添加名为@Transient
的{{1}}实例变量。 stateName
表示Hibernate / JPA不会尝试在数据库中保留此字段!您只能将它用于UI / JSP目的。
@Transient
因此,当从@Entity
@Table(name = "USERS")
public class User {
@Column(name = "STATE")
private int state=State.ACTIVE.getState();
@Transient
private String stateName;
填充User
对象时,您需要使用枚举中的DB
填充stateName
字段。
类似的东西:
STATE
然后,您可以在user.setStateName(/*get the STATE by the INTEGER id*/)
页面中呈现它,如:
JSP
希望这有帮助!
<强>建议强>
永远不要将<td>${user.state}</td>
<td>${user.stateName}</td>
模型发送到Domain
,始终使用UI
对象进行Proxy/Transfer
目的。