In order to show portlets in the portal, pages are to be created. These pages are XML documents of type PSML, i.e. Portal Structure Markup Language, a Jetspeed specific format. PSML defines how portlets are aggregated, layed out and decorated on a portal page.
A portal page can define fragments, which are the window parts of a page where content is placed. A fragment may either represent an actual portlet, showing it's content, or a layout, being responsible for the placements of child fragments within it's own fragment. These child fragments may of course be portlets or (nested) layouts.
Note that fragments have nothing do to with the look and feel or skin of pages and portlets. For that purpose, decorators are used.
This example piece of psml shows two demo portlets placed in a standard two column layout, with one-third of the page width for the left column and two-thirds for the right column.
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>Welcome</title>
<fragment type="layout" name="jetspeed-layouts::VelocityTwoColumns">
<property layout="TwoColumns" name="sizes" value="33%,67%"/>
<fragment type="portlet" name="hippo-pa::UserInfoPortlet">
<property layout="TwoColumns" name="column" value="0"/>
</fragment>
<fragment type="portlet" name="hippo-pa::ContentPortlet">
<property layout="TwoColumns" name="column" value="0"/>
<preference name="ViewPage">
<value>WEB-INF/templates/welcome/welcome.ftl</value>
</preference>
</fragment>
</fragment>
</page>
The fragment of type portlet is used to identify portlets on the page.
The name attribute is the required reference to the portlet
used to populate the fragment content. It has the format portlet-app-id::portlet-id
The fragment of type layout is a hierarchical container
used to hold portlet fragments and nested layout fragments. The root fragment
of a page must be a layout fragment. Since layouts are portlets themselves,
you can create your own layout portlet alltogether. It is easier however
to reuse standard layouts, or at least to configure standard layouts
with your own decorators.
A couple of standard jetspeed layouts that may be reused are:
For extended documentation on PSML, see Jetspeed 2's PSML guide