客户需求:客户有多个不同的分类,包括新闻,论坛,博客,微博,视频,报刊,来自同一个数据源。
客户想要的功能,完成一个portlet的开发,可以预先设置不同的分类项,而表现出不同的输出结果。
需求延伸:二维度的分类需求,比如针对张三的新闻,李四的论坛等等。如下所示:
监测项 |
新闻 |
论坛 |
博客 |
微博 |
视频 |
报刊 |
张三 |
√ |
√ |
√ |
√ |
√ |
√ |
李四 |
√ |
√ |
√ |
√ |
√ |
√ |
... |
√ |
√ |
√ |
√ |
√ |
√ |
开发设计:在对应的数据库设计表:PortletMapping
column Name |
column Key |
DataType |
id |
id |
Integer |
监测项,如张三李四 |
monitorId |
Integer |
数据类型,新闻,论坛... |
dataType |
Integer |
Portlet 实例化 windowId,唯一Id |
windowId |
Integer |
如上所述,基本的技术实现方式就是要portlet根据不同的getWindowID生成不同的绑定分项。
技术实现代码,portlet.xml当中加入:
<portlet>
<portlet-name>testPorlect</portlet-name>
<portlet-class>com.antbee.base.TestPortlet</portlet-class>
<expiration-cache>1000</expiration-cache>
<cache-scope>private</cache-scope>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
</supports>
<resource-bundle>content.Language-ext</resource-bundle>
<portlet-info>
<title>ohh,This is a test only.</title>
</portlet-info>
</portlet>
实现方式TestPortlet.java,Action片段:
@ProcessAction(name = "markForWindowAction")
public void bindWindowId(ActionRequest request, ActionResponse response) throws PortletException, IOException {
String monitorItem = request.getParameter("monitorItem");
String dataType = request.getParameter("dataType");
String windowId = request.getWindowID();
//此处代码省略,基本思路
//根据windowId,检查对应的表当中有没有数据
//如果有数据,重新绑定monitorItem和dataType,
//如果没有数据,就生成一个新的记录,绑定monitorItem,dataType,windowId.
//保存更新记录
response.encodeURL(Constants.PATH_TO_JSP_CONCERNEDDOCS_PAGE + Constants.EDIT_PAGE)).include(
request, response);
}
}
实现方式TestPortlet.java,doView片段:
@RenderMode(name = "VIEW")
public void view(RenderRequest request, RenderResponse response) throws PortletException, IOException {
String windowId = request.getWindowID();
//同样代码省略,基本思路如下:
//根据windowId,取得绑定的数据
//如果没有绑定数据,则输出提示。
//如果有绑定数据,则根据绑定数据从数据库取出要展示的数据。
//输出展示数据或者提示。
getPortletContext().getRequestDispatcher(
response.encodeURL(Constants.PATH_TO_JSP_CONCERNEDDOCS_PAGE + Constants.HOME_PAGE)).include(request,
response);
}
当然了,这是一个比较笨的方法,大家有没有更好的办法了呀?
分享到:
相关推荐
简单的portlet实例,基于pluto
不会让你失望的实例,我研究了1周才弄明白,里面内置pluto2.0.3 + portlet项目 使用于pluto 和 portlet的初学者 。 往eclipse里面配置的时候一定要按照里面图片那样配置一下。
Portlet实例代码 最简单的开发代码。
介绍基于JSR168规范的workflow portlet的完整实例
Spring Portlet MVC的实例 eclispe project
liferay portlet 开发的例子介绍
Portlet是企业系统中比较重要的一块... 支持加载Javascript文件,可以为每个portlet配置多个js文件路径 支持单视图模式 在线演示:http://www.kafeitu.me/demo/jquery-ui-portlet/index.html 标签:jQuery
什么是虚拟工厂?... 根据上面的版本下载jar文件,并将其放置在${liferay-home}/deploy 启动Liferay捆绑包,然后以管理员身份登录。 正确安装jar后,导航至“ Control Panel -> System Settings -> Platform
基于webwork+spring+hibernate的portlet开发实例。本例中充分运用MVC三层结构设计了一个portlet开发实例,结构清晰,易懂,希望大家喜欢呵呵
快速生成器,用于使用Angular创建Portlet,使Angular并且在与Angular Portlet或门户网站外观的其他实例冲突尽可能少的情况下运行。 如果选择允许,它还将自动为您运行带有新XML文件(如果已创建)的ant data-import...
Portlet 入门实例及文档 iGoogle,MyYahoo等既是使用的Portlet
这是一个 Liferay portlet 应用程序(但可以很容易地移植到其他符合 JSR286 的 portlet 容器),它由 2 个 portlet(用户端和管理)组成。 在用户 portlet 上,参与者可以注册、回答一些问题并获得唯一代码。 在管理...
最近在准备公司网站产品博客的开发,突然想到MSN个人空间可以自...故而,在网上找了个jQuery的插件,以实现这个效果。 当然,真要把这个功能在博客中实现,还是需要其他技术的配合。这里,只是收录下,以备不时之需。
portlet: { attrs: { id: 'news' }, title: 'News(亲,我是被动态添加的呦)', afterCreated: function() { alert('动态创建了News。。。'); }, content: { style: { height: '100' }, type: 'text', ...
1. portlet的类结构 2. portlet的过滤器,拦截器
用华丽的方式开发 MyUW portlet 的指南。 公共回购,但毫无歉意地专注于 my.wisc.edu 小心! 这是一个公共回购。 促进透明度和与同行 portlet 开发机构的协作是公开的。 但是,本指南毫无歉意地以 MyUW 为重点。 ...
Portlet标准汉化手册
基本JQUERY UI的一个portlet实现,采用MVC设计方式,实现拖动,布局,智能添加等功能,其部分源码用了兔子的jquery ui portlet.
portlet-api.jar portlet-api.jar portlet-api.jar
一个介绍 Portlet如何与容器交互的代码示例