介绍 JetUI
- 典型的(门户页面)的渲染引擎
- JetUI的渲染引擎
- Spaces,安全领域的门户网站工作组和项目
-
Space Navigator,快速导航到空间
- JetUI使用一个简单算法将url映射到空间和页面,它不使用分析器
-
Jetspeed Navigator在空间导航,维护页面、文件夹、链接
-
Jetspeed Toolbox,一个可停靠的portlet选择器、布局选择器、主题选择器
-
预览Portlet模式从Jetspeed工具箱
-
Portlet克隆从Jetspeed工具箱
- JAX RS Services为门户定制和注册表操作建成JetUI
- 整合Page and Dynamic templates
- Jetspeed属性配置
- 管道配置
- 不支持自定义的嵌套布局
-
只有四个主题支持(一列,两列,三列,四列)
- 不支持先进的模板(DPSML,TPSML)定制
-
JetUI不与Jetspeed分析器工作,jetUI不支持子网站,代替子网站使用空间特性
第二个选择是使用自定义Builder 构建Jetspeed,构建指南有点长篇大论,有很多信息可参考内部Maven。这里有一些命令来帮助你获得过去的一切……
mvn jetspeed:mvn -Dlist
构建和部署整个JetUI-enabled portal demo与几个portlet应用程序并将其部署到Tomcat
mvn jetspeed:mvn -Dtarget=ui
构建和部署JetUI-enable minmal与j2-admin portlet应用部署到tomcat
mvn jetspeed:mvn -Dtarget=min-ui
上面两个命令的的升级,也将psml存储到数据库
mvn jetspeed:mvn -Dtarget=ui-dbpsml
mvn jetspeed:mvn -Dtarget=min-ui-dbpsml
jetui.customization.method=ajax
此外,您可以设置默认的管道,虽然这不是必需的但是如果你直接击中了JetUI管道通过解决所有url与/jetspeed/ui代替/jetspeed/portal
pipeline.default = jetui-pipeline
<entry key='/portal'>
<value>jetui-pipeline</value>
</entry>
Jetspeed空间
如果您将部署一个JetUI网站,重要的是要理解空间是如何配置的。空间是一个顶级组织的Jetspeed网站。您可以使用空间组织或团体项目或团队到一个共同的地方。
配置一个空间和一两个例外,空间只能是顶级文件夹。您可以配置您的空间通过编辑 folder.metadata文件的任何空间。在一个folder.metadata文件的任何顶级目录,你可以把这种文件夹空间通过增加 space-owner数据源属性:
<metadata name='space-owner' xml:lang='en'>admin</metadata>
一旦您已经添加了这个单一的权限,这个文件夹将被提升从一个普通的文件夹到一个空间。您还可以使用空间管理器创建空间。有两种其他类型的空间:
- 默认的或公共空间
- 用户空间,每个用户有自己的空间
每一个用户都有自己的空间。用户空间位于 /_user/{username}文件夹。用户名通常是设定的space-owner在space-owner元数据标签。
<menu name="space-navigations" regexp="true" options="+/*/,+/*.psml" depth="-1"/>
<menu name="space-links" regexp="true" options="+/*.link"/>
还有一个模板,用于创建新空间。这个模板下找到 /_template/space.在这里您可以配置默认的页面、链接和安全约束用于创建一个新的空间。随意修改文件,或添加更多的页面在用户和空间模板中发现的/_template到你的系统中。
未来的方向——空间
空间导航器
<fragment id="jsSpaceNavigator" type="portlet" name="j2-admin::SpaceNavigator" decorator='clear'>
<property name="y" value="300"></property>
<property name="x" value="20"></property>
<property name="state" value="detach"></property>
</fragment>
此外,空间导航器是一个分离的portlet。JetUI引入了一个新的特殊的属性到fragments中名为 state.我们将此属性设置为值 detach.如果一个portlet是分离的,它并不仅限于流动布局控制大多数门户页面。相反,它可以被放置在一个页面上的特定区域。看到 x和y属性,用于定位portlet在具体地点在页眉区域。独立式portlet还可以拖,搬来搬去。然而,我们不希望portlet需要移动,所以我们使用一个 cleardecorator,这意味着portlet没有标题栏。因为JetUI拖沓,portlet标题栏的下降,如果我们使用一个 cleardecorator,portlet不能移动。
url映射
拖拽的portlet
- 流控制拖拽
- z顺序拖拽
对接工具栏
JetUI支持两种工具栏,一个停靠在左侧,和一个停靠在页面的右侧。这些工具栏都是可选的,但是从盒子里他们都配置为启用。在演示JetUI分布,我们已经把工具栏在系统范围的页面模板 template.tpsml,这意味着所有页面将默认情况下显示工具栏。你可以很容易地配置页面模板没有工具栏,或者只有一个工具栏,通过编辑template.tpsml文件并删除两个片段定义。按照惯例这个片段定义必须使用一个特殊的fragment id。对于左边栏,fragment id必须jstbLeft。为正确的工具栏,fragment id必须jstbLeft,如果这些fragments没有找到一个页面上,工具栏将不会显示。
<fragment id="jstbLeft" type="layout" name="jetspeed-layouts::VelocityOneColumn">
<property name="row" value="0"></property>
<property name="column" value="0"></property>
<property name="state" value="normal"></property>
<property name='toolbar' value='true'></property>
<property name='class' value='jsLeftToolbar'></property>
<fragment id="jsPageNavigator" type="portlet" name="j2-admin::PageNavigator">
<property name="row" value="0"></property>
<property name="column" value="0"></property>
<property name="state" value="normal"></property>
<property name="tool" value="true"></property>
</fragment>
</fragment>
注意在工具栏上有一个特殊的属性,工具栏是一个布局。它需要一个特殊的属性来表示,它是一个工具栏。这个属性是名副其实的 toolbar和被设置为true。一个工具栏片段有一个位置在页面上指定的 rows和 column属性。这也是一个 state属性,这可以是 normal或 closed。在顶部的工具栏有箭头按钮,它允许您隐藏或打开工具栏。这个state是坚持每个用户fragment的state属性。当工具栏是开放的时候state是normal,当是关闭的时候state是closed。最终一个工具栏有一个CSS类用于格式化布局。布局是一个列包含一个portlet的页面导航器,它会被标记为一个工具。当使用流控制拖拽工具不能降目标,在本例中只有一个portlet的工具栏。当然不止一个portlet可以放置在工具栏。
<fragment id="jstbRight" type="layout" name="jetspeed-layouts::VelocityOneColumn">
<property name="row" value="0"></property>
<property name="column" value="2"></property>
<property name="state" value="normal"></property>
<property name='toolbar' value='true'></property>
<property name="state" scope="user" scopeValue="guest" value="closed"></property>
<property name='class' value='jsRightToolbar'></property>
<fragment id="jsToolbox" type="portlet" name="j2-admin::JetspeedToolbox">
<property name="row" value="0"></property>
<property name="column" value="0"></property>
<property name="state" value="normal"></property>
<property name="tool" value="true"></property>
</fragment>
</fragment>
分离和关闭portlet
JetUI引入了三个新的portlet窗口的行动:detach, attach and close。实际上detach 和 attach是相互切换的,一个portlet要么是detach要么是attach,它永远不可能两个同时存在。标题栏的图标解释:有X的代表close按钮,点击它将把该portlet从页面删除,其右边的按钮,用箭头连接到左边,是detach按钮。一旦一个portlet是分离的,detach按钮就变成了一个re-attach按钮,有着一个箭头连接到右边的分离一个portlet将portlet在z顺序拖拽方式,这意味着这些portlet总是保持着高水平的。通过按attach按钮,portlet被放回最近的一列中,回到流控制拖拽和渲染。这个detached state存储在fragment中,并且这些state是每个用户的基础。这x,y属性只跟当portlet是detached时有关。也注意到这个state在fragment中的名字是detach,此外有一个新的属性,名叫scope。下面你将看到x,y值的范围是user,与scopeValue设置为用户名admin,
<fragment id="dp-22" type="portlet" name="j2-admin::ForgottenPasswordPortlet">
<property name="row" value="1"></property>
<property name="column" value="0"></property>
<property name="x" scope="user" scopeValue="admin" value="536.0"></property>
<property name="y" scope="user" scopeValue="admin" value="88.0"></property>
<property name="width" scope="user" scopeValue="admin" value="1121.0"></property>
<property name="height" scope="user" scopeValue="admin" value="120.0"></property>
<property name="state" scope="user" scopeValue="admin" value="detach"></property>
<property name="row" scope="user" scopeValue="admin" value="4"></property>
</fragment>
调整portlet
<fragment id="dp-22" type="portlet" name="j2-admin::ForgottenPasswordPortlet">
...
<property name="width" scope="user" scopeValue="dave" value="1121.0"></property>
<property name="height" scope="user" scopeValue="dave" value="120.0"></property>
<property name="state" scope="user" scopeValue="dave" value="detach"></property>
</fragment>
jetspeed的Toolbox
jetspeed toolbox 是一个可停靠的portlet,为了让用户定制很容易的一次点击。这个toolbox可以停靠到左边或者右边的页面,或者它可以自由浮动在页面的顶部。他的toolbox包含三个面板让你快速访问添加portlet,改变布局,或改变主题:
- Portlet选择器
- 布局
- 主题
Portlet选择器是第一个选项卡。这个新特性使您快速访问的页面定制,允许您搜索portlet通过关键字或类别,然后通过一次点击添加到你的页面的portlet。第一个特性是您将看到的搜索功能的toolbox。你可以输入一个搜索字符串,和portlet选择器将返回一个列表匹配搜索标准的portlet。搜索是在完全索引portlet的元数据,如关键字和标题,在所有自动索引内容在portlet中注册。搜索索引是Lucene和Solr企业搜索引擎所支持。
主题选择
选择当前页面的主题一样容易选择主题选项卡,然后单击主题。介绍了几种新的主题Jetspeed 2.2.1。主题仍然是实现页面的decorator,有一个用于扩展页面装饰器的文件decorator.properties。你可以找到页面的decorator Jetspeed webapp,在decorations/layout目录。预览Portlet模式
Portlet选择器支持预览Portlet,Portlet选择器支持预览Portlet,以防你不想把该Portlet放到页面上那么之前就必须先看看它。有两种方法为一个portlet来支持预览。首先,portlet可以提供一个图像的portlet,并告诉了Jetspeed jetspeed-portlet.xml部署描述符portlet应用程序输入一个js:metadata给portlet,该名称属性设置为portlet.preview.image图像的路径是一个portlet应用程序相对路径预览图。
<portlet id="WeatherPortlet">
<portlet-name>WeatherPortlet</portlet-name>
<js:metadata name="portlet.preview.image">/images/preview/weatherportlet.png</js:metadata>
</portlet>
<portlet id="GoogleMapsPortlet">
<portlet-name>GoogleMapsPortlet</portlet-name>
<js:metadata name="portlet.preview.image">/images/preview/googlemapsportlet.png</js:metadata>
</portlet>
<supports>
<mime-type>text/html</mime-type>
...
<portlet-mode>preview</portlet-mode>
. ..
<custom-portlet-mode>
<description>Custom Preview Mode</description>
<portlet-mode>preview</portlet-mode>
</custom-portlet-mode>
克隆portlet
Jetspeed页面导航器
Jetspeed页面导航器支持终端用户导航和管理他们自己的空间,页面和文件夹。此外,手中的管理员,整个网站可以轻易地使用Jetspeed导航。视图的导航器是分成三个部分:
- 上方部分显示了当前文件夹,它的所有内容
-
一个可选的第二部分,显示在当前文件夹的链接
-
第三部分为添加新页面,文件夹和链接
<menu name="space-navigations" regexp="true" options="+/*/,+/*.psml" depth="-1"/> <menu name="space-links" regexp="true" options="+/*.link"/>Context Menus
- Rename
- Move
- Copy
- Delete
添加文件夹和链接的作品中添加页面一样。模板可以在模板选项是在portlet.xml的j2-admin程序中注册。
<portlet-preferences> <preference> <name>defaultTemplatePage</name> <value> /_template/new-user/min.psml </value> </preference> <preference> <name>templatePages</name> <value> /_template/new-user/min.psml /_template/new-user/default-page.psml </value> </preference> <!-- If the following pref is blank, then the default admin role and admin user is used. --> <preference> <name>spaceAdminRoles</name> <value></value> </preference> </portlet-preferences>
Extensions to PSML
PSML延长在版本2.2.1支持许多JetUI特性. PSML模板是一个新特性允许工具栏和空间导航器出现在所有页面而不需要声明portlet和为每个页面布局。相反,可以自动合并片段与任何页面使用页面模板或片段引用。碎片有两个新属性添加到支持多用户自定义属性的片段。<fragment id="dp-22" type="portlet" name="j2-admin::ForgottenPasswordPortlet"> ... <property name="width" scope="user" scopeValue="dave" value="1121.0"></property> <property name="height" scope="user" scopeValue="dave" value="120.0"></property> <property name="state" scope="user" scopeValue="admin" value="detach"></property> </fragment>
... <property name="y" value="300"></property> <property name="x" value="20"></property> <property name="state" value="detach"></property> ... <property name='toolbar' value='true'></property> <property name="state" scope="user" scopeValue="guest" value="closed"></property> <property name='class' value='jsRightToolbar'></property> <fragment id="jsToolbox" type="portlet" name="j2-admin::JetspeedToolbox"> <property name="row" value="0"></property> <property name="column" value="0"></property> <property name="state" value="normal"></property> <property name="tool" value="true"></property> </fragment> ...
property | values | description |
---|---|---|
state | normal,detach,closed |
这个窗口状态的一个片段,要么detached或attached(normal)或closed(对于一个用户或组用户)
|
toolbar | true,false | 这是片段工具栏 |
toolbar | true,false | 这是一个工具在一个工具栏片段? |
x | numeric screen value | x位置的一个超然的detached portlet |
y | numeric screen value |
y位置的一个超然的detached portlet
|
width | numeric screen value | 调整后的宽度,detached portlet |
height | numeric screen values | 调整后的高度,detached portlet |
class | a CSS class name | CSS样式应用于给定的片段 |
Jetspeed Properties Configurations
property | values | description |
---|---|---|
jetui.customization.method | ajax,server |
使用JetUI定制引擎,设置为ajax。打开Jetspeed经典的渲染引擎,设置为server
|
jetui.render.engine | CSRE,SSRE |
JetUI渲染引擎来设置客户端或服务器端渲染引擎的渲染引擎。到2.2.2,只有SSRE是支持的
|
jetui.ajax.transport | json |
运输对所有
REST API调用JetUI定制引擎。目前只支持JSON。
|
jetui.render.template | /WEB-INF/jetui/yui/jetui.jsp | |
jetui.drag.mode | full |
截至2.2.2,只支持完整,sentire拖动窗口全尺寸,拖在其他portlet的目标。未来的支持将只需要一个小图标。
|
jetui.style.portlet | .portal-layout-cell |
CSS样式为JetUI portlet窗口,也用于识别和找到所有portlet
|
jetui.style.layout | .portal-layout-column |
CSS样式为JetUI布局窗口,也用于识别和找到所有布局容器
|
jetui.style.drag.handle | .PTitle | CSS样式为JetUI标题栏,也用作处理portlet窗口的拖放 |
pipeline.default | jetspeed-pipeline |
设置默认管道,尽管它是没有必要的,如果你直接击中了JetUI管道通过解决所有url与
/jetspeed/ui 代替 /jetspeed/portal |
JetUI管道配置
<bean id="jetui-pipeline" class="org.apache.jetspeed.pipeline.JetspeedPipeline" init-method="initialize"> <meta key="j2:cat" value="default" /> <constructor-arg> <value>JetuiPipeline</value> </constructor-arg> <constructor-arg> <list> <ref bean="capabilityValve" /> <ref bean="portalURLValve" /> <ref bean="securityValve" /> ... <ref bean="jetuiValve" /> <ref bean="cleanUpValve" /> </list> </constructor-arg> </bean>
<bean id='pipeline-map' class='java.util.LinkedHashMap'> <meta key="j2:cat" value="default" /> <constructor-arg> <map> ... <entry key='/portal'> <value>jetui-pipeline</value> </entry