客户需求:客户有多个不同的分类,包括新闻,论坛,博客,微博,视频,报刊,来自同一个数据源。
客户想要的功能,完成一个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里面配置的时候一定要按照里面图片那样配置一下。
综上所述,构建一个基于JSR168的workflow portlet需要对portlet生命周期、MVC模式、工作流引擎、portlet通信以及安全性等多个方面有深入理解。通过不断学习和实践,开发者可以创建出高效、易用且适应企业需求的...
生命周期的不同阶段有不同的接口,例如Portlet实例可以在多个请求之间保持活动状态。 - **Portlet实例数量**:开发者需要决定Portlet实例的数量,这直接影响到Portlet的性能和资源使用。 - **个性化**:Portlet提供了...
在“Portlet实例代码”中,我们可能找到的是一个简单的Portlet开发示例。这个示例可能是用Java语言编写的,因为Java是Portlet开发的标准语言,基于JSR 286(portlet 2.0 API)或JSR 168(portlet 1.0 API)。下面将...
Eclipse是一款广泛使用的Java集成开发环境(IDE),在这里,我们有一个名为"Spring Portlet MVC的实例 eclispe project"的压缩包,其中包含了使用Eclipse创建的Spring Portlet MVC示例项目。 Portlets是Web应用程序...
- **portlet实例**:portlet容器根据需要创建的portlet类的实例,每个portlet实例对应门户中的一个portlet显示区域。 - **portlet配置**:定义portlet的元数据,如portlet名称、描述、显示模式、首选项等。 - **...
Portlet标准旨在促进不同厂商门户服务器之间的互操作性,确保portlet可以在多种环境中无缝运行。 通过深入学习和实践这些知识点,开发者可以创建高效、灵活且适应性强的portlet,丰富企业门户的功能,满足用户多样...
2. **窗口ID**:每个portlet窗口都有唯一的ID,这使得portlet可以在多个实例之间区分,同时为个性化和通信提供了便利。 3. **窗口属性**:开发者可以通过`PortletSession`对象设置和获取窗口属性,实现portlet间的...
这意味着,一个portlet可以以不同的配置参数运行,而不需要创建多个Portlet类实例。具体Portlet可以被多个用户共享,且在整个portlet生命周期中,可以根据需要创建和销毁多个实例。 具体Portlet实例是在用户界面中...
4. 配置portlet:在portlet.xml文件中定义portlet的元数据,如portlet名称、描述、参数等。 5. 测试和调试:在开发环境中部署portlet,通过门户服务器的管理界面添加portlet到门户页面,进行功能测试和界面调整。 ...
这个构建过程会根据`service.xml`生成相应的Java源代码和Hibernate配置,从而实现对数据库的自动映射和操作。执行`build-service-portlet-users`目标后,会在`ext-impl\src\com\ext\portlet\users`和`ext-service\...
- 用户可以根据需要定制portlet的参数,这些偏好可以存储在portlet-preferences中,允许portlet动态地适应用户需求。 6. **portlet的MIME类型和portlet模式**: - MIME类型定义了portlet可以处理的数据类型,而...
1. **创建portlet项目**:使用IBM的开发工具创建一个新的portlet项目,并配置portlet.xml文件。 2. **实现portlet接口**:根据需求选择实现Portlet、GenericPortlet或EventPortlet等接口。 3. **编写portlet逻辑**:...
在 Liferay 的 Portal 页面中,多个 Portlet 共存,但用户每次只能与一个 Portlet 进行交互。JSR168 规范定义了两种主要的 Portlet 请求类型:Action 请求和 Render 请求。Action 请求用于处理用户提交的数据,如...
"sample"文件可能包含一系列portlet开发的实例,涵盖了不同功能和复杂度,帮助开发者理解和实践portlet开发。 总的来说,学习和掌握JSR168 portlet开发,对于希望将产品集成到多门户环境中的公司来说至关重要。...
portlet是Web应用程序中的一个组件,它允许用户在门户页面上个性化和交互地访问信息和服务。Portlet技术主要应用于企业级的门户系统,如IBM WebSphere Portal、Liferay Portal等,为用户提供了一种集中管理和展示...
Portlet与传统的Web应用不同,它并不处理整个页面,而是与多个其他Portlets一起协作构建一个完整的Web页面。每个Portlet有自己的生命周期,包括初始化、渲染、事件处理和动作请求等阶段。在"HelloWorld"工程中,我们...