는 내가 그것을 가지고 :
나는 또한 내가이 공개 방법 (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);
}
}
첫 번째 메시지는 가장 작은 타임 스탬프가 있다고 가정하면 (올바른 가정 것 같다).