2013-06-06 3 views
0

각 메시지에 첫 번째/마지막 게시물/메시지에 대한 링크를 추가해야합니다. 현재 페이지의 시작 부분으로 이동하는 "상단"링크가 있습니다. 나는 그것이 첫 번째 게시물과 스레드의 마지막 게시물로 점프하는 추가적인 링크 "하단"으로 점프 싶어요.liferay messageboard 스레드의 첫 번째/마지막 메시지로의 링크

링크를 추가해도 문제가되지 않지만 스레드의 마지막 메시지를 쉽게 얻을 수있는 방법이 있습니까?

답변

0

는 내가 그것을 가지고 :

나는 또한 내가이 공개 방법 (getLastMessageOfThread 및 ...)에 의해 호출되는 일반적인 개인 방법 만든 첫 번째 메시지에 대한 링크를 필요로하기 때문에 :

private Long getMessageOfThread(long threadId, boolean last) { 
    Long result = null; 
    try { 
     List<MBMessage> threadMessages = MBMessageLocalServiceUtil.getThreadMessages(threadId, 0, messageCreateDateComp); 
     if (Validator.isNotNull(threadMessages)) { 
      result = last ? threadMessages.get(threadMessages.size() - 1).getMessageId() : threadMessages.get(0).getMessageId(); 
     } 
    } catch (SystemException e) { 
     throw new IllegalStateException("Problem on getting thread messages for thread id " + threadId + ", cause:", e); 
    } 
    return result; 
    } 

을 그럼 난 view_thread_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> 
... 

아마 쉽게하지만 절대하는 Liferay 멍청한 놈 i'am 돈 수 있습니다. 여기에 완성도를 위해 사용 된 비교를 위해 :

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); 
    } 

} 

첫 번째 메시지는 가장 작은 타임 스탬프가 있다고 가정하면 (올바른 가정 것 같다).

관련 문제