You'll need to have a working installation of IBM WebSphere Portal Server Version 4.x to follow along with this tip.
The MetroSphere portal is a community weblog aimed at technology professionals, and one of our team's major goals is the personalization of content. As such, it's important that we know what categories of information a particular user would like to see. Although the personalization engine that comes with portal provides all kinds of sophisticated ways to figure that out through tracking and comparing a user's actions to those of other users, there is one very simple way for us to know what topics interest a user.
We can ask.
To do that, we're going to add a list of topics to the registration page, as in Figure 1.
Figure 1. The completed page
This list is only temporary, of course. As we get closer to completion, we'll refine it further, so it's natural to pull the topics from a database. And because this is just one of many places in which we're displaying a list of topics, it makes sense to use a tag library to do it.
Adding the tag library to the page
The body of the registration page is contained in the file:
<WebSphere Home>/PortalServer/app/wps.ear/wps.war/screens/html/UserProfileForm.jsp
In addition to changing the layout of the page slightly, we added a reference to the tag library and the tags themselves:
Listing 1. Adding the tags to the page
<%@ page session="false" buffer="none" %>
<%-- Licensed Materials - Property of IBM, 5724-B88, (C) Copyright IBM Corp. 2001, 2002 -
All Rights reserved. --%>
<%@ taglib uri="/WEB-INF/tld/engine.tld" prefix="wps" %>
<%@ taglib uri="/WEB-INF/tld/blogtaglib.tld" prefix="blogutil" %>
<%@ include file="BidiInclude.jsp" %>
<wps:constants />
<jsp:useBean id="userWrapper" class="com.ibm.wps.puma.UserWrapper" scope="request"/>
<jsp:useBean id="errorBean" class="com.ibm.wps.puma.UserState" scope="request"/>
<jsp:useBean id="reqAttributes" class="java.util.Vector" scope="request" />
<%@ page import="com.ibm.wps.datastore.LanguageDescriptor" %>
...
</td><td style="background-color: #ECECEC" valign="top">
<table>
<tr><td colspan="3"> </td></tr>
<tr>
<td align="<%= bidiAlignRight %>"><%=
reqAttributes.contains("FAVORITETOPICS")?"*":" " %></td>
<td align="<%= bidiAlignLeft %>" class="wpsEditText">
<b><label for="wps.FavoriteTopics"><wps:text key="metro.favTopics"
bundle="nls.metro">Preferred Topics</wps:text></label></b>
</td>
</tr>
<blogutil:topiclist selected="-1">
<jsp:useBean id="topicelement" class="com.metrosphere.util.TopicBean" />
<tr>
<td><input type="checkbox" name="topicChoice"
value="<jsp:getProperty name="topicelement" property="topicId" />"/>
</td>
<td><jsp:getProperty name="topicelement" property="topicName" /></td>
<td> </td>
</tr>
</blogutil:topiclist>
</table>
</td></tr>
</table>
<span class ="wpsEditSmText" ><wps:text key="requiredfield"
bundle="nls.registration" /></span>
</td></tr>
</td>
</tr>
</table>
<%-- start admin footer --%>
<table cellspacing="4" cellpadding="0" border="0" width="100%">
...
|
In an upcoming article on using custom user attributes, we'll look at making sure that checkboxes
are preselected if the user is editing his or her profile rather than creating
a new one, but for now we're just thinking about getting the tag library in
place. Ultimately, we'll also have to
add the topics tags to the UserProfileConf.jsp page.
Adding the classes and tag library file
For any of this to work, we need to make sure that the tag classes are available to the portal itself. When we were using the tags within a portlet application, we didn't have to worry about it; we simply included the classes in the application. Now we need to make the classes available to the portal itself.
When using J2EE, there are typically two ways to make a
class available to the application. The
first, and most convenient, is to take the relevant class files and add them to
a JAR file, and then add the JAR
file to the /WEB-INF/lib directory.
In some cases, however, including some
versions of WebSphere Application Server included with WebSphere Portal, these
JAR files are not automatically added to the classpath, so you need to add the
individual classes to the /WEB-INF/classes directory of the overall application
server, taking into account the package hierarchy:
<WebSphere Home>/AppServer/classes/com/metrosphere/util/BlogConnection.class
<WebSphere Home>/AppServer/classes/com/metrosphere/util/TopicBean.class
<WebSphere Home>/AppServer/classes/com/metrosphere/util/TopicListTag.class
<WebSphere Home>/AppServer/classes/com/metrosphere/util/TopicTag.class
We also need to make the tag library definition file,
blogtaglib.tld, available to the portal
application. The trick is in
understanding that what we think of as the "portal" itself is
actually a J2EE application in the PortalServer
directory. So in order to add the blog
utility classes to the overall portal, we need to add the .tld
file to the following directory:
<WebSphere Home>/PortalServer/app/wps.ear/wps.war/WEB-INF/tld/
This is the directory referenced by the page directive:
<%@ taglib uri="/WEB-INF/tld/blogtaglib.tld" prefix="blogutil" %>
You can also use the web.xml
file to specify aliases for this tag library.
In some cases, you may want to create an alias for the tag
library by adding it to the web.xml file.
This file is located in:
<WebSphere Home>/PortalServer/app/wps.ear/wps.war/WEB-INF/tld/
To add the tag library to the file, you can simply add a taglib
element:
Listing 1. Adding an alias to the web.xml file.
...
<servlet-mapping id="ServletMapping_tr_3">
<servlet-name>TranscodingUtilities</servlet-name>
<url-pattern>/TranscodingUtilities/*</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/tld/blogtaglib.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/blogtaglib.tld </taglib-location>
</taglib>
<taglib>
<taglib-uri>engine</taglib-uri>
<taglib-location>WEB-INF/tld/engine.tld</taglib-location>
</taglib>
...
|
One reason to do this is for mantainability.
You can create an alias for the file, and
then if you decide to change it later, say, to create a new version, you won't
have to alter any of the actual JSP files.
Instead, you can just make one change to the web.xml
file.
By making the topic list tag library available to the
portal, you can greatly increase maintainability for pages that are not part of
a portlet application. To do that, you
add the classes to the classes directory
of the application server itself, and the tag library definition to the
WEB-INF/tld directory within the PortalServer
directory.
- Participate in the discussion forum.
- Keep up with developments on the MetroSphere project.
- Other parts of the series show you how to control the look of the portal, "Create a new theme" (developerWorks, June 2003), and explore JSP tag libraries, "Hands-on intro to JSP technology: Creating a community weblog
" (developerWorks, May 2003).
- Get more information on the inner workings of WebSphere Application Server .
- Find out about WebSphere Portal Server and read the documentation .

Nicholas Chase, a Studio B author, has been involved in Web site development for companies such as Lucent Technologies, Sun Microsystems, Oracle, and the Tampa Bay Buccaneers. Nick has been a high school physics teacher, a low-level radioactive waste facility manager, an online science fiction magazine editor, a multimedia engineer, and an Oracle instructor. More recently, he was the Chief Technology Officer of an interactive development firm in Clearwater, Florida, and is the author of four books on Web development, including XML Primer Plus (Sams).
