[jboss-user] [JBoss Portal] - Got it y'all. Here's a working Struts bridge example (2.6.1)

NM-156 do-not-reply at jboss.com
Fri Sep 7 14:48:47 EDT 2007


I was finally able to piece together the relevant pieces of documentation to make a simple Struts application work as a portlet in JBoss Portal 2.6.1. (JBoss AS 4.0.5)

Here are the relevant configuration files. You should be able to create the rest, as it is just a simple HelloWorld type Struts app.

1.In web.xml, change Struts ActionServlet entry from: 

	org.apache.struts.action.ActionServlet

to:

org.apache.portals.bridges.struts.PortletServlet

2.Download the struts portal bridge jar from:

http://portals.apache.org/bridges/download.html

	(Note that you must extract the jar from the downloaded archive file)

	and place it in the /WEB-INF directory OR the server's /lib directory

3.Create the following descriptor files, and place them in the /WEB-INF directory of the project:

	portlet.xml:


  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
  |              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |              xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
  |              version="1.0">
  |  <portlet>
  |    <portlet-name>TestStrutsPortlet</portlet-name>
  |    <display-name>TestStrutsPortlet</display-name>
  |    <description>This is a Struts Test Portlet</description>
  |    <portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class>
  |   <init-param>
  |     <name>ServletContextProvider</name>
  |     <!-- The following portal implementation has been configured manually -->
  |     <value>org.jboss.portal.bridge.JBossServletContextProvider</value>
  |   </init-param>
  |    <init-param>
  |     <name>ViewPage</name>                               
  |     <value>/login.do</value>                          
  |    </init-param>
  |    <init-param>
  |     <name>EditPage</name>                               
  |     <value>/login.do</value>                          
  |    </init-param>
  |    <expiration-cache>-1</expiration-cache>
  |    <supports>
  |     <mime-type>text/html</mime-type>
  |     <portlet-mode>VIEW</portlet-mode>
  |    </supports>
  |       <supports>
  |     <mime-type>text/html</mime-type>
  |     <portlet-mode>EDIT</portlet-mode>
  |    </supports>
  |    <portlet-info>
  |     <title>Struts Validator Portlet</title>
  |     <short-title>Struts</short-title>
  |     <keywords>Struts, validator</keywords>
  |    </portlet-info>
  |   </portlet>
  | </portlet-app>
  | 
  | 

	portlet-instances.xml:


  | 
  | <?xml version="1.0" standalone="yes"?>
  | 
  | <!DOCTYPE deployments PUBLIC
  |    "-//JBoss Portal//DTD Portlet Instances 2.6//EN"
  |    "http://www.jboss.org/portal/dtd/portlet-instances_2_6.dtd">
  |    
  |    <!-- This is a JBoss-specific portal deployment descriptor -->
  |    
  | <deployments>
  |    <deployment>
  |       <instance>
  |          <instance-id>TestStrutsPortletInstance</instance-id>
  |          <portlet-ref>TestStrutsPortlet</portlet-ref>
  |       </instance>
  |    </deployment>
  | </deployments>
  | 
  | 

	<any_name_you_want>-object.xml:


  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <!DOCTYPE deployments PUBLIC
  |    "-//JBoss Portal//DTD Portal Object 2.6//EN"
  |    "http://www.jboss.org/portal/dtd/portal-object_2_6.dtd">
  |    
  |    <!-- This is a JBoss-specific portal deployment descriptor -->
  |    <!-- parent-ref element specifies portal and portal page   -->
  |    
  | <deployments>
  |    <deployment>
  |       <parent-ref>default.default</parent-ref>
  |       <if-exists>overwrite</if-exists>
  |       <window>
  |          <window-name>TestPortletWindow</window-name>
  |          <instance-ref>TestStrutsPortletInstance</instance-ref>
  |          <region>center</region>
  |          <height>1</height>
  |       </window>
  |    </deployment>
  | </deployments>
  | 
  | 

	struts-portlet-config.xml:


  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <config>
  |   <render-context>
  |     <attribute name="errors"/>
  |     <attribute name="message" keep="true"/>
  |   </render-context>
  |   <portlet-url-type default="action">
  |   <action path="/login.do"/>
  |   <action path="/testStrutsPortlet.do"/>
  |   </portlet-url-type>
  | </config>
  | 
  | 

4.Unzip the struts portal bridge jar into a directory and extract the struts portal specific .tld files from the tld directory. Put them in your WEB-INF directory (These files are important because they will rewrite the URLs to access the portal)

	Sample JSPs that import the TLDs:

login.jsp:


  | 
  | <?xml version="1.0" encoding="UTF-8" ?>
  | <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
  | <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
  | <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
  | <%@ taglib uri="/WEB-INF/struts-portlet-html.tld" prefix="html" %>
  |  
  | <%@ page language="java" contentType="text/html; charset=UTF-8"
  |     pageEncoding="UTF-8"%>
  |     
  | <portlet:defineObjects/>
  |     
  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <html xmlns="http://www.w3.org/1999/xhtml">
  | <head>
  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  | <title>Results</title>
  | </head>
  | <body>
  | 
  | 	<html:form styleId="testForm" action="/testStrutsPortlet.do" method="POST">
  | 	<table>
  | 	<tr><td><label>User:</label></td>
  |      <td><html:text property="user" size="15"/></td>
  |      </tr>
  | 	<tr><td><label>Password:</label></td>
  |      <td><html:password property="pwd" size="15"/></td>
  |      </tr>
  |     <tr><td><html:submit value="Search"/></td></tr>
  |     </table>
  |     </html:form>
  | 
  | 
  | </body>
  | </html>
  | 
  | 

results.jsp:


  | 
  | <?xml version="1.0" encoding="UTF-8" ?>
  | <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
  | <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
  | <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
  | <%@ taglib uri="/WEB-INF/struts-portlet-html.tld" prefix="html" %>
  |  
  | <%@ page language="java" contentType="text/html; charset=UTF-8"
  |     pageEncoding="UTF-8"%>
  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | 
  | <bean:define id="input_form" name="test_form"/>
  | 
  | <html xmlns="http://www.w3.org/1999/xhtml">
  | <head>
  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  | <title>Response</title>
  | </head>
  | <body>
  | 
  | <h3>Hello, <bean:write name="input_form" property="user"/>. I am Brainiac.</h3>
  | 
  | </body>
  | </html>
  | 
  | 

In this example, login.jsp is set up to be the target forward of the first action called in the app (it's the first JSP shown as a portlet). results.jsp is associated with the forward that handles the response (/testStrutsPortlet.do). Note the the <init-param> tags are the reason the login page is displayed.

This is just a bare bones example. The config files and .tlds are the keys to get it working.


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4082264#4082264

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4082264



More information about the jboss-user mailing list