`
sumongh
  • 浏览: 227298 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Liferay中SearchContainer的用法

阅读更多

Liferay中SearchContainer的用法

Liferay中,列表通常是使用SearchContainer来实现的,如BBS的栏目列表等。在Liferay的源代码中,JSP夹杂了大量的本应在Action中实现的代码,因此导致很难看懂。我尝试写一个Portlet,结果就在JSP处耗费了很长时间。

在此简单总结一下SearchContainer的用法,边写代码先写文档,内容有些不恰当。具体可参考message_boards/view.jsp中的代码。

1.1 概述

作为一个条目的列表,应该包括几个方面的内容:

l         Table的标题行

l         Table的内容

l         每一个条目允许的操作

l         分页

1.2 Table的标题行

标题行相对比较简单,核心代码如下:

List headerNames = new ArrayList();

headerNames.add("news.column");

headerNames.add("news.columndescript");

headerNames.add("news.childcolumns");

headerNames.add(StringPool.BLANK);

其中注意两点:

1、  每个标题,应该是i18n的资源,需要在资源文件中添加内容。

2、  最后一行,是用来显示可能的操作按钮的,不需要标题行。

1.3 创建SearchContainer

根据这个headerNames来创建SearchContainer

首先需要生成一个PortletURL对象,并包括必要的参数

PortletURL portletURL = res.createRenderURL();

portletURL.setParameter("struts_action", "/ext/news/columnadmin/view");

portletURL.setParameter("columnId", columnId);

如果页面是分为多个Tab的,还需要将Tab也添加进去。

然后就可以创建SearchContainer

SearchContainer searchContainer = new SearchContainer(req, null, null,"column",

SearchContainer.DEFAULT_DELTA, portletURL,headerNames, null);

检查源代码,SearchContainer函数的定义为

SearchContainer(RenderRequest req, DisplayTerms displayTerms,

DisplayTerms searchTerms, String curParam, int delta,

       PortletURL iteratorURL, List headerNames,

       String emptyResultsMessage)

这一步同创建headerNames应该是可以互换的,用searchContainer.setHeaderNames()即可。

1.4 Table的内容

主要由几个小步骤完成

1.4.1 设置总条数

searchContainer.setTotal(total);

1.4.2 直接设置查询结果

searchContainer.setResults(results)

变量是一个List,其中的每一个对象将会被用到下一个设置可执行操作的JSP中。

1.4.3 设置Table的显示条目

List resultRows = searchContainer.getResultRows();

for (int i = 0; i < results.size(); i++) {

       NewsColumn cutColumn = (NewsColumn) results.get(i);

       // 生成新的一个显示行

ResultRow row = new ResultRow(cutColumn, cutColumn.getPrimaryKey()

                                   .toString(), i);

       // 设置URL

       PortletURL rowURL = res.createRenderURL();

       rowURL.setWindowState(WindowState.MAXIMIZED);

       rowURL.setParameter("struts_action", "/ext/news/columnadmin/view");

       rowURL.setParameter("columnId", cutColumn.getColumnId());

       // 设置每一列的显示内容

       row.addText(cutColumn.getName(), rowURL);

       row.addText(cutColumn.getDescription(), rowURL);

       row.addText(childCount), rowURL);

       // 设置每一个条目的可用操作

       row.addJSP("right", SearchEntry.DEFAULT_VALIGN, "*.jsp");

      

resultRows.add(row);

}

1.5 每一个条目允许的操作

通过row.addJSP("right", SearchEntry.DEFAULT_VALIGN, "column_action.jsp")来调用JSP显示相应的操作。

JSP中,通过下面的语句能够获取当前条目的 model 对象

ResultRow row =

(ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);

MBCategory category = (MBCategory)row.getObject();

拿到model之后,通过<c:if test="<%= MBCategoryPermission.contains 方式判断权限,如果允许操作,则首先生成相应的portletURL,然后显示icon图标。

<c:if test="<%= MBCategoryPermission.contains(permissionChecker, category, ActionKeys.UPDATE) %>">

       <portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" var="portletURL">

              <portlet:param name="struts_action" value="/message_boards/edit_category" />

              <portlet:param name="redirect" value="<%= currentURL %>" />

              <portlet:param name="categoryId" value="<%= category.getCategoryId() %>" />

       </portlet:renderURL>

 

       <liferay-ui:icon image="edit" url="<%= portletURL %>" />

</c:if>

这部分代码涉及到Liferay的权限机制。

1.6 显示table和分页

显示table很简单,在JSP

<liferay-ui:search-iterator searchContainer="<%= searchContainer %>" />

 

SearchContainer自身支持分页。以下几步

l         创建SearchContainer时设置每页显示的条数

构造函数SearchContainer的第四个参数int delta就是每页显示的条数,缺省使用SearchContainer.DEFAULT_DELTA,表示每页显示20条。我们可以用其他任何我们喜欢的数值。

l         从逻辑层取数据时提供beginend参数

searchContainer.getStart() searchContainer.getEnd()

l         显示分页信息

<liferay-ui:search-paginator searchContainer="<%= searchContainer %>" /> 



分享到:
评论
3 楼 harobnm 2009-01-22  
  需要转换一下,通过get的方式后得到转成iso-8859-1了,你再转换一下,最简单的就是在tomcat的server.xml 里面配置一下,添加一个 URIEncoding=""
2 楼 happyprogram 2008-11-08  
查询条件出现中文的话,点击分页标签的话中文字符就会出现乱码这是问什么呢?
1 楼 waryist 2007-08-14  
有点难懂

相关推荐

    liferay development 中文

    理解这些插件的工作原理和开发方法是提升Liferay应用灵活性的关键。 9. **API与Web服务**:Liferay提供丰富的Java API和Web服务接口(如SOAP和RESTful),使得开发者可以轻松地与其他系统集成。 10. **性能优化**...

    liferay中文资源

    1. **中文文档**:详细介绍了Liferay的安装、配置、使用方法和开发指南,适合初学者和有经验的开发者参考。 2. **源码示例**:展示Liferay的模块化设计、服务架构以及如何编写portlet、theme或布局模板等,有助于...

    Liferay 6 入门教程

    此外,"plugins开发指南11-plugin中开发hibernate应用.pdf"涵盖了在Liferay中使用Hibernate进行数据持久化的实践方法,这对于处理复杂业务逻辑至关重要。 "plugins开发指南13-liferay中使用ldap分析.pdf"讨论了...

    liferay的开发文档

    本压缩包包含了四个重要的Liferay开发文档,旨在帮助开发者深入理解和掌握Liferay的使用与开发技巧。 文档一:《Liferay Portal Developer's Guide》 这份文档详细介绍了Liferay Portal的开发流程,包括portlet的...

    Liferay 开发中文手册

    配置 和二次开发 详尽描述 是liferay开发的必备手册

    SearchContainer的用法说明.pdf

    在JSP中,你需要使用Liferay的Taglib来渲染SearchContainer,这会自动处理表格的展示和分页功能。例如,使用`&lt;liferay-ui:search-container&gt;`标签,并在其内部使用`&lt;liferay-ui:search-container-row&gt;`和`&lt;liferay-...

    SearchContainer的用法说明.docx

    在 Liferay 的 Web 应用开发中,SearchContainer 提供了一种方便的方式来组织和展示数据,同时支持用户交互,如排序、过滤和操作。 1.1 概述 SearchContainer 主要包含以下几个关键组成部分: 1. **Table 的标题行...

    liferay详细讲解 liferay项目完全讲解

    通过这份文档,我们可以深入学习Swing组件的使用,从而更好地设计和构建Liferay中的portlet。 最后,文件名“7.7、7月6日liferay”可能是指Liferay的一个特定版本或某个主题的讲解,这可能涵盖该版本的新特性、性能...

    在liferay中整合GWT,附例子

    在Liferay中整合GWT(Google Web Toolkit)是一项常见的任务,尤其对于开发复杂的企业级Web应用来说,这种集成可以利用GWT的强大力量来创建高性能的用户界面,同时利用Liferay的门户功能和社区特性。这篇博文提供了...

    Liferay的AUI框架

    Liferay中的AUI框架,官方叫做Alloy,是一个UI超框架,能为浏览器的三方面,结构,风格和表现建立网络应用提供连续的简单的API。...AUI的很多语法结构、使用方法都都和YUI相关不太多。熟悉YUI的能够快速熟悉AUI。

    Liferay Portal Liferay IDE

    Liferay Portal Liferay IDE

    liferay 超级学习文档

    最后,理解Liferay的工作流系统和内容管理系统的使用,以及如何与其他企业系统进行集成。 五、实战项目 通过实际的项目开发,你可以更好地理解和运用Liferay。例如,创建一个新闻发布portlet,实现发布、分类、搜索...

    Liferay 主题开发官方文档中文翻译

    推荐使用Liferay IDE或Liferay Developer Studio进行开发,这些工具提供了专为Liferay定制的功能,能够大大提高开发效率。此外,还需要确保Liferay Portal处于开发模式下,以便于实时预览和调试主题。 #### 四、...

    liferay如何在eclipse中配置开发和debug环境

    - 使用Liferay提供的API和Service Builder来开发Portlets和其他组件,以充分利用Liferay的功能和性能。 - 利用Liferay IDE的自动部署功能,修改代码后无需手动部署,Eclipse会自动将更新同步到服务器。 - 学习并...

    liferay 整合struts例子

    7. **安全性与性能优化**:在实际整合过程中,还需要考虑安全性和性能问题,例如使用Spring Security增强安全性,或者通过缓存和负载均衡提高系统性能。 通过这个实例,开发者可以深入理解Liferay与Struts的集成...

    liferay扩展环境 liferay ext

    描述中提到的链接指向了一篇博客文章,虽然内容未提供,但通常这类资源会包含有关设置和使用Liferay开发环境的详细步骤,特别是针对Windows用户的指导。在Liferay的开发环境中,开发者通常需要安装Java运行环境(JRE...

    Liferay6.0开发指南

    - **部署方法**:使用特定命令或工具将Portlet部署到Liferay环境中。 ##### 2. Portlet 结构解析 - **Action 阶段**:处理用户的请求和数据提交。 - **Render 阶段**:负责渲染用户界面。 - **信息传递**:在...

    liferay中应用Struts例子

    该文档是在Liferay5.1.2中应用struts的示例,使用时只要现创建一个portlet,然后解压缩并利用该文档中相同的部分将其覆盖,然后build,deploy后,即可看到其结果,安装使用都及其方便。

    liferay环境的搭建

    - 由于Liferay开发环境需要使用UTF-8编码,而Eclipse默认使用GBK编码,因此需要更改Eclipse的编码设置。 - 依次点击 `Window` &gt; `Preferences` &gt; `General` &gt; `Workspace`,在 `Text file encoding` 处选择 `Other...

    Liferay开发指南(中文)和liferay详细介绍(英文)

    在"Liferay开发指南(中文)"中,你可以找到以下关键知识点: 1. **Liferay架构**:了解Liferay的基础架构,包括其服务层、业务逻辑层和展现层,这将有助于理解Liferay如何处理请求和响应。 2. **portlet开发**:...

Global site tag (gtag.js) - Google Analytics