2012-04-27 106 views
0

我是新来玩,每当我使用list.add(Object)到列表并打印列表的大小时,它仍然是0!在播放框架中添加一个对象到列表中

我的方法是像一个教程,它会检查登录用户是否喜欢此教程,如果是的话,它会将教程的likeCount加1,然后将教程添加到用户列表中。如果不是,则表示他已经喜欢它。 由于教程没有保存在列表中,我无法检查它是否已经被喜欢或不是!

型号:

@Entity 
    public class RegisteredUser extends Model { 
public String name; 
    @ManyToMany 
public List<Tutorial> contributedTutorials; 

    public RegisteredUser(String name) { 
    this.name = name; 
    this.likeList = newArrayList<Tutorial>(); 
    this.save(); 
    } 
    } 

    @Entity 
    public class Tutorial extends Model { 
public String Title; 
    public int likeCount; 
    public Tutorial(String title) { 
    this.title = title; 
    this.likeCount = 0; 
    } 

控制器: 公共教程延伸控制器{ 公共静态无效likeTutorial(){

if (session.get("RegisteredUserId") != null && session.get("tutID") != null) { 
    { 
     long uId = Long.parseLong(session.get("RegisteredUserId")); 
     RegisteredUser user = RegisteredUser.findById(uId); 
     long tId = Long.parseLong(session.get("tutID")); 
     Tutorial tut = Tutorial.findById(tId); 
     int x = tut.likeCount; 
     x++; 
     if (!(user.likeList.contains(tut))) 
      // to check that this user didn't like this tut before 
     { 
      Tutorial.em().createQuery("update Tutorial set likeCount ="+ x +" where id=" +tId).executeUpdate(); 
      tut.refresh(); 
      user.updateLikeList(tut); // THIS IS NOT WORKING!!! 
      renderText("You have successfully liked this Tutorial " + user.likeList.size()); 
     } 
     } 
     renderText("Opps Something went Wrong!!"); 
    } 
} 
} 

的视图:

 <a href="@{Tutorials.likeTutorial()}">Like </a> 
+0

哪里的失败,user.updateLikeList(啧)的部分的代码; ? – 2012-04-27 11:51:01

+0

@Pere Villega是的! – 2012-05-04 22:42:56

+0

@OHAssan我的意思是,我们需要看到user.updateLike的代码,因为这就是在这里失败 – 2012-05-04 23:04:21

回答

0

+您无需在构造函数中调用this.save()this.likeList = newArrayList<Tutorial>();。实际上后者在语法上是错误的。

+将教程ID作为会话变量传递是非常错误的。您需要将它作为GET参数传递给动作。

+替换为你的检查:

// to check that this user didn't like this tut before 
if (! user.likeList.contains(tut)) { 
    // Tutorial.em().createQuery("update Tutorial set likeCount ="+ x +" where id=" +tId).executeUpdate(); 
    // tut.refresh(); 
    // user.updateLikeList(tut); // THIS IS NOT WORKING!!! 
    tut.likeCount++; 
    tut.save(); 

    // Since it's a ManyToMany relationship, you only need to add it to one list and the other will reflect properly if mappedBy properly 
    user.likeList.add(tut); // note that the example you showed uses contributedTutorials not likeList 
    user.save(); 

    renderText("You have successfully liked this Tutorial " + user.likeList.size()); 
} 
0

我作出的调整你上面

而且 映射在RegisteredUser型号

@ManyToMany 
public List<Tutorial> likeList; 

提到的,我已经添加了映射教程型号

@ManyToMany 
    public List<RegisteredUser> likersList; 

并调节在控制器中的方法如下

if (! user.likeList.contains(tut)) { 

tut.likeCount++; 
//tut.likersList.add(user); // however this raised an error too! at the next line 
tut.save(); 
//as for the likeCount update, it has worked perfectly, Thank You 

// Since it's a ManyToMany relationship, you only need to add it to one list and the other will reflect properly if mappedBy properly 
//I have modified Model Tutorial as shown above and it didn't work too ! 
user.likeList.add(tut); 
user.save(); // this raised an error!! 

renderText("You have successfully liked this Tutorial " + user.likeList.size()); 

}

相关问题