想要在jsp中显示与value对应的枚举名称

时间:2016-10-14 17:17:01

标签: java spring hibernate jsp enums

我是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的某些功能?

任何建议和帮助都会有所帮助,谢谢。

1 个答案:

答案 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目的。