liferay留言板链接到线程中的第一条/最后一条消息

liferay留言板链接到线程中的第一条/最后一条消息,liferay,Liferay,我需要在每条消息中添加第一条/最后一条帖子/消息的链接。目前有一个“顶部”链接跳转到页面的开头。我希望它跳转到第一篇文章和一个额外的链接“底部”,跳转到线程的最后一篇文章 添加链接不是问题,但是有没有一种简单的方法可以获取线程的最后一条消息?我知道了: 因为我还需要到第一条消息的链接,所以我创建了一个更通用的私有方法,该方法由两个公共方法(getLastMessageOfThread和…)调用: private Long getMessageOfThread(Long threadId,布尔值l

我需要在每条消息中添加第一条/最后一条帖子/消息的链接。目前有一个“顶部”链接跳转到页面的开头。我希望它跳转到第一篇文章和一个额外的链接“底部”,跳转到线程的最后一篇文章

添加链接不是问题,但是有没有一种简单的方法可以获取线程的最后一条消息?

我知道了:

因为我还需要到第一条消息的链接,所以我创建了一个更通用的私有方法,该方法由两个公共方法(getLastMessageOfThread和…)调用:

private Long getMessageOfThread(Long threadId,布尔值last){
长结果=空;
试一试{
List threadMessages=MBMessageLocalServiceUtil.getThreadMessages(threadId,0,messageCreateDateComp);
if(Validator.isNotNull(threadMessages)){
结果=最后一个?threadMessages.get(threadMessages.size()-1).getMessageId():threadMessages.get(0).getMessageId();
}
}捕获(系统异常e){
抛出新的IllegalStateException(“获取线程id“+threadId+”的线程消息时出现问题,原因:”,e);
}
返回结果;
}
然后我钩住了view\u thread\u message.jsp:

...
                <ul class="edit-controls lfr-component">
                <%
                    String firstMessageId = String.valueOf(MyMessageboardLocalServiceUtil.getFirstMessageOfThread(thread.getThreadId()));
                    String lastMessageId = String.valueOf(MyMessageboardLocalServiceUtil.getLastMessageOfThread(thread.getThreadId())); 
                    String firstMessageAnchor ="#" + renderResponse.getNamespace() + "message_" + firstMessageId;
                    String lastMessageAnchor ="#" + renderResponse.getNamespace() + "message_" + lastMessageId;
                %>
                <liferay-portlet:renderURL varImpl="lastMessageUrl">
                    <portlet:param name="struts_action" value="/message_boards/view_message" />
                    <portlet:param name="messageId" value="<%=  lastMessageId %>" />
                </liferay-portlet:renderURL>

                <liferay-portlet:renderURL varImpl="firstMessageUrl">
                    <portlet:param name="struts_action" value="/message_boards/view_message" />
                    <portlet:param name="messageId" value="<%=  firstMessageId %>" />
                </liferay-portlet:renderURL>

                <li>

                    <liferay-ui:icon
                        image="top"
                        label="<%= true %>"
                        url="<%= firstMessageUrl.toString() + firstMessageAnchor %>"
                    />
                </li>

                <li>

                    <liferay-ui:icon
                        image="bottom"
                        label="<%= true %>"
                        url="<%= lastMessageUrl.toString() + lastMessageAnchor %>"
                    />
                </li>
...
。。。
  • ...
也许这会容易些,但我绝对是个不折不扣的人。为了完整起见,这里使用的比较器:

    private static class MBMessageDateComparator implements Comparator<MBMessage> {

    @Override
    public int compare(MBMessage arg0, MBMessage arg1) {
        Long time0 = arg0.getCreateDate().getTime();
        Long time1 = arg0.getCreateDate().getTime();
        return time0.compareTo(time1);
    }

}
私有静态类MBMessageDateComparator实现Comparator{
@凌驾
公共整数比较(MBMessage arg0、MBMessage arg1){
Long-time0=arg0.getCreateDate().getTime();
长时间1=arg0.getCreateDate().getTime();
返回时间0.compareTo(时间1);
}
}
假设第一条消息具有最小的时间戳(这似乎是一个正确的假设)

    private static class MBMessageDateComparator implements Comparator<MBMessage> {

    @Override
    public int compare(MBMessage arg0, MBMessage arg1) {
        Long time0 = arg0.getCreateDate().getTime();
        Long time1 = arg0.getCreateDate().getTime();
        return time0.compareTo(time1);
    }

}