基于gsp文件

时间:2018-03-15 11:15:54

标签: grails controller gsp

在我看来,我需要显示当前用户是喜欢还是不喜欢文章。这是应该生成输出的方法:

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?

1 个答案:

答案 0 :(得分:0)

如果您想根据gsp中的用户参数获取文章(喜欢或不喜欢)的“状态”,您需要对该操作进行 Ajax 调用或创建适当的操作在gsp页面上ajax成功后获取状态并在gsp上更新/创建DOM(UI)。触发ajax调用以获取有关页面加载事件的数据,因此它会按照您的说法自动添加/更新您的html视图

您使用的现有方式可以呈现默认数据而无需获取用户的任何参数,如果您同时需要 Ajax 呈现模型,则可以单独执行操作 strong>方法,一个动作将用于ajax,另一个用于获取默认数据,如果你想保持相同的调用,你可以检查params.VALUE是否为null然后设置默认值。