2011-08-02 56 views
0

我不斷收到此異常:如何從控制器獲取屬性作爲表達式值?

javax.el.PropertyNotFoundException:房產 '消息' 上 型com.itworx.twitter.model.User

沒有發現,當我嘗試運行此從我的控制器代碼:

@RequestMapping(value="/profile", method=RequestMethod.GET) 
    public ModelAndView goProfile(@ModelAttribute("user") User user){ 
     if(user != null){ 
      ModelAndView modelAndView = new ModelAndView("profile-layout"); 
      List< Message> messages=service.getUserMessages(user.getUsername()); 
      /*user.setMessages(messages);*/ 
      /*modelAndView.addObject("user",user);*/ 
      modelAndView.addObject("userMessages",messages); 
      return modelAndView; 
     }else{ 
      return new ModelAndView("register-layout"); 
     } 

    } 

用戶bean是這樣的:

@Entity 
@Table(name="user") 
public class User implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -5689970869179555442L; 

    @Id 
    @Column(name="username") 
    /*@NotNull*/ 
    private String username; 

    @Column(name="password") 
    private String password; 

    @Column(name="email") 
    /*@Email*/ 
    private String email; 

    @ManyToMany 
    @JoinTable(name="user_follower",joinColumns={@JoinColumn(name="username")}, 
      inverseJoinColumns={@JoinColumn(name="follower")}) 
    private List<User> followers = new ArrayList<User>(0); 

    /*@LazyCollection(LazyCollectionOption.FALSE)*/ 
    @OneToMany 
    @JoinTable(name="user_message",joinColumns={@JoinColumn(name="username")}, 
      inverseJoinColumns={@JoinColumn(name="message_date")}) 
    @OrderBy(value="messageDate") 
    private List<Message> messages = new ArrayList<Message>(0); 

    public User() { 

    } 

    public String getUsername() { 
     return this.username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return this.password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public void setUserFollowers(List<User> followers) { 
     this.followers = followers; 
    } 

    public List<User> getUserFollowers() { 
     return followers; 
    } 

    public void setMessages(List<Message> messages) { 
     this.messages = messages; 
    } 

    public void addMessage(Message message){ 
     this.messages.add(message); 
    } 

    public List<Message> getMessages() { 
     return messages; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

} 

和DAO實現是這樣的:

public List<Message> getUserMessage(String username) { 
     session=sessionFactory.getCurrentSession(); 
     @SuppressWarnings("unchecked") 
     List<Message> messages=session.createCriteria(User.class).setFetchMode("messages", FetchMode.JOIN) 
     .add(Restrictions.eq("username", username)).list(); 
     return messages; 
    } 

頁是這樣的:

<body> 
    <table id="feeds" style='width: 100%'> 
    <tr></tr> 
    </table> 
    <table style='width: 100%'> 
    <tr></tr> 
     <c:forEach var="msg" items="${userMessages}"> 
      <tr> 
       <td> 
        <c:out value="${msg.message}" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <c:out value='${msg.messageDate}' /> 
       </td> 
      </tr> 
     </c:forEach> 
    </table> 
</body> 

回答

0

對不起,這個答覆是周齡,所以你可能已經想通了這一點,但我認爲這個問題出現在你的DAO實現中。這條線:

List<Message> messages=session.createCriteria(User.class) 
     .setFetchMode("messages", FetchMode.JOIN) 
     .add(Restrictions.eq("username", username)).list(); 

實際上是想給你回User對象與messages集合初始化列表。

改變DAO的方法是:

session=sessionFactory.getCurrentSession(); 
@SuppressWarnings("unchecked") 
User userWithMessages=session.createCriteria(User.class) 
     .setFetchMode("messages", FetchMode.JOIN) 
     .add(Restrictions.eq("username", username)).uniqueResult(); 
return userWithMessages.getMessages(); 

應該給您(也可能給你的話),你在找什麼。

+0

嗯是的我已經想通了,但嘿謝謝你這篇文章可能會幫助有同樣問題的人謝謝你 –

相關問題