在我看来,我需要显示当前用户是喜欢还是不喜欢文章。这是应该生成输出的方法:
String showCurrentUsersLikeOrDislikeStatus(){
String status = ' ';
ServiceUser user = springSecurityService.currentUser
Article article = Article.findById(params.getIdentifier()) //how to make this work?
ArticleLike al = ArticleLike.findByArticleAndServiceUser(article, user)
switch(al.liked){
case true:
status = 'You like this article';
break;
case false:
status = 'You dislike this article';
break;
default:
status = 'You have not voted for this article yet'
break;
}
return status;
}
Article article = Article.findById(params.getIdentifier())
行返回null。这很明显,因为我想在用户传递任何参数之前调用该方法。这是gsp代码:
<g:each in="${articles}" var="article">
<table class="table-bordered">
<tr>Article title: ${article.title}</tr><br>
<tr>Author: ${article.author}</tr><br>
<tr>Page: ${article.page}</tr><br>
<tr>Likes: ${article.getLikesCount()}</tr><br>
<g:link resource="Article" action="articleLiked" id="${article.id}" params="[Article: 'article', ServiceUser: 'serviceUser']">Like</g:link>
<br>
<g:link resource="Article" action="articleDisliked" id="${article.id}" params="[Article: 'article', ServiceUser: 'serviceUser']">Dislike</g:link>
I NEED TO PUT THIS HERE
</table>
</g:each>
这里是视图渲染代码:
render (view: 'articleList', model: [ articles: getArticle(), articleLikes: getArticleLike(), serviceUser: user, status: showCurrentUsersLikeOrDislikeStatus()]);
我的问题是,如何让视图自动生成showCurrentUsersLikeOrDislikeStatus()
的返回值并避免上面提到的null?
答案 0 :(得分:0)
如果您想根据gsp中的用户参数获取文章(喜欢或不喜欢)的“状态”,您需要对该操作进行 Ajax 调用或创建适当的操作在gsp页面上ajax成功后获取状态并在gsp上更新/创建DOM(UI)。触发ajax调用以获取有关页面加载事件的数据,因此它会按照您的说法自动添加/更新您的html视图 。
您使用的现有方式可以呈现默认数据而无需获取用户的任何参数,如果您同时需要 Ajax 和呈现模型,则可以单独执行操作 strong>方法,一个动作将用于ajax,另一个用于获取默认数据,如果你想保持相同的调用,你可以检查params.VALUE是否为null然后设置默认值。