【发布时间】:2016-10-14 17:17:01
【问题描述】:
我是 Spring 新手,试图在表格中填充用户详细信息,该表格将显示系统用户的一些基本信息 表结构是
Firstname Lastname Email Phone Number Role State
我正在使用 Spring 4 和 Hibernate 4。
我的模型课
@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*/
用户列表的My Controller方法
@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;
}
我的Jsp代码显示用户列表数据
<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>
现在我有一个枚举,其中包含有关用户状态的信息
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();
}
}
在 JSP 中,state 以整数形式出现
我想显示name,对应state的字符串值,它是一个由spring注入并由hibernate从DB中获取的整数。
我知道有一些方法可以做到这一点,比如我可以从枚举创建一个映射并将其对象发送到 JSP 或定义我自己的自定义 TLD。
但我对这些解决方案仍然不满意,有没有更好的方法来显示价值,用一些更标准的方式或使用 spring 和 EL 的一些特性?
任何建议和帮助都会得到充分的帮助,谢谢。
【问题讨论】:
-
您可能会尝试在模型中定义一个名为 getStateName 的方法并返回 enum.name 方法。然后从jsp使用user.stateName?我对 jsp 不熟悉,但是使用 spring 这会起作用。
-
@alan7678 那么如何在JSP中使用EL访问这个方法返回的值呢?
-
如何将 stateName 私有字段添加到您的 User 对象,然后在将其发送到 JSP 页面进行渲染之前,使用 state Integer 中的正确 String 值设置 stateName?哦,stateName 字段不会持久化到数据库中,即不会由 Hibernate 会话管理
-
@Mechkov 如果在 User 类 Hibernate 中添加一个私有字段,请尝试在 DB 中找到它,但不存在因此触发异常。
标签: java spring hibernate jsp enums