阅读:2787次   评论:0条   更新时间:2011-05-26    

一、SimpleFramework Portal体验

在开始介绍之前,让我们先体验一下SimpleFramework Portal

图:demo演示

二、综述

SimpleFramework为基于JavaEE技术体系开放架构的组件化Web应用开发框架,其最大的技术优势之一就是开放的组件架构,Web应用开发者不仅可以利用现有组件,实现Web应用的快速构建,而且按照SimpleFramework的组件规范即可随需定制应用组件,或基于现有组件构建复合应用组件,从而实现开发过程的组件化,以及业务的组件化。

SimpleFramework Portal是SimpleFramework的重量级组件之一,它为用户提供了快速开发Portal应用简单且行之有效的方法。

三、SimpleFramework Portal组件描述

3.1 组件流程

图:Portal组件流程

3.2 实现技术

  1. Servlet Filter技术
  2. HTML Parser(JSOUP)
  3. PageLet(Web Widget)
  4. 异步装载PageLet(AJAX)
  5. HTTP Client仿真
  6. 主Servlet HTTP内容组装(同步装载及页面合成)

3.3 优势

  1. 轻量级的Portal组件
  2. 快速的Portal应用构建
  3. 少量代码的内容展现及业务实现
  4. 协议(HTTP)级的Portal化异构应用整合
  5. 可选择的Portal内容部件装载方式(同步、异步/AJAX)
  6. 多样化个性化的内容展现组件整合应用(自有组件、定制组件)

3.4 与传统Portal的差异

以Liferay为例:

比较项

SimpleFramework 
Portal

Liferay
Portlet规范 N Y
Porlet容器 N Y
个性化 Y Y
轻量级 Y Y
组件化 Y Y
AJAX支持 Y Y
Paglet(Widget) Y N
HTTP Client仿真 Y N
内容组装 同步,异步 同步,异步
业务实现(类) HandleClass Servlet/Porlet API
内容组件定制 SimpleFramework组件
Javascript 框架/组件
JSP、Taglib、Template等   
Javascript框架及组件
JSP、Taglib、Template等

3.5 问题域及应用范畴

3.5.1 问题域

  • 解决Web门户的快速构建问题
  • 解决Web门户应用的快速实现问题
  • 解决Web门户的组件化及复用问题
  • 解决Web门户对应用系统和数据的集成
  • 解决Web门户的个性化服务问题

3.5.2 应用范畴

  • 门户化应用构建
  • 个性化页面实现
  • 门户组件独立应用
  • 内容整合应用支撑

四、SimpleFramework Portal组件开发

4.1 开发流程

图:开发流程

4.2 开发步骤

4.2.1 声明Layout组件,与页面元素绑定

文件index.xml:

<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://www.simpleframework.net/xsd/default/simple.xsd">
    <components>
        <layout name="demoLayout" containerId="demoLayout" showMenu="true">
        </layout>
    </components>
</page>

文件index.jsp:

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<div id="demoLayout"></div>

4.2.2 为PageLet添加选项(Options)

“选项”是SimpleFramework Portal的一个业务扩展接口。

文件demo_option.xml:

<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://www.simpleframework.net/xsd/default/simple.xsd">
    <components>
        <propEditor name="hellowordOptionEditor" containerId="hellowordOptionEditor">
            <field label="定义业务">
                <component type="textButton" name="_hello_word">
                    <event name="click">$Actions['helloDict']();</event>
                </component>
            </field>
        </propEditor>
        <tree name="HelloTree">
            <treenode text="北京" id="你好北京!" />
            <treenode text="世界" id="你好世界" />
            <treenode text="上地" id="上地,你好" />
            <treenode text="总经理">
                <treenode text="副经理" id="HI,副经理" />
                <treenode text="开发经理" id="HI,开发经理" />
                <treenode text="产品经理" id="HI,产品经理" />
            </treenode>
        </tree>
        <dictionary name="helloDict" bindingId="_hello_word" title="Simple Hello 字典">
            <tree ref="HelloTree" />
            <jsSelectCallback>
        <![CDATA[
          if (selects.length > 0 && !selects[0].branch.hasChildren()) {
            $('_hello_word').value = selects[0].id;
            return true;
          }
        ]]>
      </jsSelectCallback>
        </dictionary>
    </components>
</page>

文件demo_option.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<div id="hellowordOptionEditor"></div>
<div style="text-align: right; margin-top: 6px;">
    <input type="button" id="customOptionSave" value="确定" onclick="__layout_option_save();" /> <input
        type="button" value="取消" onclick="__layout_option_close();" />
</div>

4.2.3 实现业务处理接口(HandleClass)

类HelloWordModuleHandle:

public class HelloWordModuleHandle extends AbstractLayoutModuleHandle {

    public HelloWordModuleHandle(final PageletBean pagelet) {
        super(pagelet);
    }

    @Override
    protected String[] getDefaultOptions() {
        return defaultOptions;
    }

    // 实现 layout中的 pagelet[应用设置]功能
    @Override
    public IForward getPageletOptionContent(final ComponentParameter compParameter) throws Exception {
        return new UrlForward("/demo_option.jsp");
    }

    // 获得 Pagelet 需要显示的内容
    @Override
    public IForward getPageletContent(ComponentParameter compParameter) throws Exception {
        return new TextForward(getPagelet().getOptionProperty("_hello_word"));
    }

    private static String[] defaultOptions = new String[] { "_hello_word= SimpleHelloWord" };
}

4.2.4 注册PageLet模块

在Servlet启动时注册该PageLet模块,参见web.xml的定义。

类HelloWordRegistry:

public class HelloWordRegistry extends HttpServlet {
    private static final long serialVersionUID = -7941207277562361975L;

    @Override
    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
        LayoutModuleRegistryFactory.regist(HelloWordModuleHandle.class, "HelloWord",
                "HelloWord-demo", "信息", "/my/hello.gif", "发布 Helloword");
    }
}

4.3 运行效果

图:已注册的PageLet模块

图:在Portal中展示的PageLet模块

图:选项设置(一)

图:选项设置(二)

图:设置选项后的运行结果

五、结论

  1. SimpleFramework Portal 只需要声明一个ID就可以完成Portal的整合应用
  2. SimpleFramework Portal 组件提供很多基础功能,用户可更多的关注业务
  3. SimpleFramework为Portal应用提供了多样化内容展现组件的,可提高应用开发效率

六、资源

本文中示例详见 [SimpleFramework Portal组件示例下载],导入Eclipse即进行本地体验。

 

原文: http://simpleframework.net/news/v/17744.html

评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics