liferay在留言溥的基础上开发留言本

这两天要做一个在线留言板,liferay本身提供的留言溥功能很强大,很多功能根本用不着的,所以打算自已做一个,本以为很简单的一个留言本结果花了一个星期的时间,郁闷之极。现在把一些经验写下来。
liferay-display.xml:
<portlet id="message_books" />
liferay-portlet-ext.xml:
<portlet>
<portlet-name>message_books</portlet-name>
<icon>/html/portlet/blogs/icon.png</icon>
<struts-path>message_books</struts-path>
<configuration-action-class>com.ext.portlet.messageboards.action.ConfigurationActionImpl</configuration-action-class>指向自已的configurationaction
<use-default-template>false</use-default-template>
<restore-current-view>false</restore-current-view>
<instanceable>true</instanceable>因为有十几套网站要用到,原来没有这句话,造成在不同的网站中PortletPreferences取值不同,这个问题找了两天,搞得要吐血。
<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>
<render-weight>0</render-weight>
</portlet>
portlet-ext.xml:
<portlet>
<portlet-name>message_books</portlet-name>
<display-name>message_books</display-name>
<portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
<init-param>
<name>view-action</name>
<value>/message_books/view</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
<portlet-preferences>
<preference>
<name>categoryId</name>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
<portlet-info>
<title>message_books</title>
</portlet-info>
</portlet>
struts-config-ext.xml:
<!-- message books -->
<action path="/message_books/view" type="com.ext.portlet.messageboards.action.ViewAction">
<forward name="portlet.message_boards.error" path="portlet.message_boards.error" />
<forward name="portlet.message_books.view" path="portlet.message_books.view" />
</action>

<action path="/message_books/edit_message" type="com.ext.portlet.messageboards.action.EditMessageAction">
<forward name="portlet.message_boards.edit_message" path="portlet.message_books.edit_message" />
<forward name="portlet.message_boards.error" path="portlet.message_boards.error" />
</action>
tiles-defs-ext.xml:
<definition name="portlet.message_books.view" extends="portlet.message_boards">
<put name="portlet_content" value="/portlet/ext/message_boards/view.jsp" />
</definition>


<definition name="portlet.message_books.edit_message" extends="portlet.message_boards">
<put name="portlet_content" value="/portlet/ext/message_boards/edit_message.jsp" />
</definition>
以上就是主要的配置文件的
ViewAction用messageboards本身的就可以,只是要改一个return actionforward地址,EditMessageAction复制原有的,不过在updateMessage中他使用的是MBMessageServiceUtil.addMessage方法,这个方法是要验证userID的,可是很奇怪我在有的网站没有登陆可以留言但是有的不行,现在还没有找出问题,我只有使用了MBMessageLocalServiceUtil.addMessage这个方法多了一个参数就是USRERID我设了一个变量就是游客的ID这也是没有办法的办法。ConfigurationActionImpl这个不能复制原来的因为原来的很复杂没有必要,我复制的是journalarticles的ConfigurationAction,因为这个简单些,只是要把社区类型改成留言本的类型(比如娱乐讨论区,生活区)MBCategoryLocalServiceUtil.getCategories这个方示可以取得。
OK下面就是JSP了,大家可以发现liferay的JSP写的很复杂很大一部分的功能都是在jsp里面实现 的,这个也不例外,在这里我只写出JSP中重要的一些方法。
view.jsp:
int tatal = MBMessageLocalServiceUtil.getCategoryMessagesCount(categoryId);//这个方法给一个留言类型就可得到一共几条

List list = MBMessageLocalServiceUtil.getCategoryMessages(categoryId, 0, tatal);//得到所有类型的留言
但是有点要注意这取出了所有的留言,有很多只是其中一些的回复留言,message.getParentMessageId() == 0那么这个就是根留言了,否则的话里面的ID就是他回复对像的ID,这个对像也是在这个list中的,至于怎么显示就看自已的需要了。
configuration.jsp:

int total = MBCategoryLocalServiceUtil.getCategoriesCount(portletGroupId.longValue(), 0);//取出留言板所有类型,第一个参数是当然网站的ID也叫社区ID
searchContainer.setTotal(total);
List results = MBCategoryLocalServiceUtil.getCategories(portletGroupId.longValue(), 0, searchContainer.getStart(), searchContainer.getEnd());//取出所有的类型这样就可以在JSP中用下拉框显示出来了,可以让管理员来设定要显示的那个类型。其他的至于每页显示数量,排序都可以用他原有的。
edit_message.jsp:
这个就根据你的需要来写了,他原有的功能很多的,你只需要保留你想显示的,其他就删。
基本上到这里就结束了,不过这个是没有翻页功能的,他本身提供了一个翻页的标签,可是想和他的融合起来还有很困难的,因为他的是一个<liferay-ui:search-iterator searchContainer="<%= searchContainer %>" />而我取出的是一个LIST,并且他的显示格式是固定的。

你可能感兴趣的:(jsp,xml,struts,ext,配置管理)