2016-10-14 12 views
1

のjspの値に対応し、テーブル内のユーザの詳細を投入しようとしている列挙型の名前を表示したい、テーブルはシステムのユーザーのいくつかの基本的な情報が表示されます テーブルの構造は私は春に新しいです

Firstname Lastname Email Phone Number Role State 
です

私は春の4を使用して、ユーザーリスト

の4

マイModelクラス

@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*/ 

私のコントローラメソッドを休止しています

<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> 

ユーザリストデータを表示する

@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コード今私はstateを整数として来る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(); 
    } 

} 

についての情報を持っている列挙型を持っている

name、に対応する文字列値を表示したいはバネでインジェクトされた整数で、DBからハイバネートによってフェッチされます。

私は、enumからマップを作成し、そのオブジェクトをJSPに送信したり、独自のカスタムTLDを定義したりできるようにいくつかの方法があることを知っています。

しかし、私はまだこれらの種類のソリューションに満足していません、いくつかのより標準的な方法で値を表示するか、春とELのいくつかの機能を使用するより良い方法はありますか?

ご意見やご協力がありがとうございました。

+0

役に立つかもしれないhttp:// stackoverflow。com/questions/3889248/java-get-the-enum-name-given-the-enum-value –

+0

モデルでgetStateNameというメソッドを定義し、enum.nameメソッドを返します。その後jspからuser.stateNameを使用しますか?私はJSPに精通していませんが、春にはこれはうまくいくでしょう。 – alan7678

+0

@ alan7678次に、ELを使用してJSPでこのメソッドによる戻り値にアクセスするにはどうすればよいですか? –

答えて

0

これを有効にする方法の1つです。 Userクラスでは、stateNameというインスタンス変数@Transientを追加します。 @Transientは、Hibernate/JPAがこのフィールドをデータベースに保持しようとしないことを意味します! UI/JSPの目的にのみ使用します。

@Entity 
@Table(name = "USERS") 
public class User {  

    @Column(name = "STATE") 
    private int state=State.ACTIVE.getState(); 

    @Transient 
    private String stateName; 

UserオブジェクトがDBから移入されますときに、あなたはあなたの列挙型から正しいSTATEstateNameフィールドを移入したいと思います。以下のような

何か:次に

user.setStateName(/*get the STATE by the INTEGER id*/) 

は、あなたがJSPページのように、それをレンダリングすることができます。

<td>${user.state}</td> 
<td>${user.stateName}</td> 

・ホープこのヘルプ!

推薦

常にUI目的でProxy/Transferオブジェクトを使用し、UIにごDomainモデルを送ることはありません。

+0

プロキシ/トランスファーとは、ビューとモデルの間のインターフェイスレイヤーとサービスレイヤーを意味しますか? –

+0

アプリの内部にあるべきドメインモデルに似ている、独自のモデルを持つAPIレイヤーのようなもの – Mechkov

+0

Mechkovに感謝と助力をいただきました。 –

関連する問題