Modifications apportées aux pages JSP de Struts
Les pages JSP destinées aux applications Struts de l'environnement de portail doivent être modifiées pour s'adapter aux attentes du serveur de portail en matière de création des URI des portlets. La bibliothèque de balises HTML a été modifiée et d'autres bibliothèques ont été ajoutées pour prendre en charge les marquages cHTML et WML.
Création d'URI de portlet
Les chemins des applications Struts, vers les actions et les pages, doivent être envoyés et extraits à l'aide d'URI de portlet. Ces URI respectent un format spécifique. Une API spéciale permet de les générer et d'ajouter les informations requises à transmettre au portlet. Si les URI de portlet n'étaient pas utilisés, le contrôle ne serait pas transféré au portlet correct. Par conséquent, il faut employer les URI de portlet pour que le contrôle soit transféré au portlet adéquat et que les informations supplémentaires concernant le chemin d'accès requises par l'application Struts deviennent accessibles. Les balises Struts ont été modifiées afin de fournir systématiquement cette fonctionnalité.
Les mappages d'action Struts sont définis sous la forme de chemins d'accès. Le nom et l'emplacement des objets page (JSP, par exemple) sont aussi définis à l'aide de chemins. Par conséquent, bien que les portlets disposent de leur propre forme d'URI, il est toujours nécessaire d'associer le chemin Struts à une action envoyée à un portlet et de l'extraire lorsque l'action de portlet est traitée. L'URI Struts est transmis sous forme de paramètre afin que le processeur de requêtes Struts puisse traiter l'action. Si le lien n'est pas une action, alors le portlet traite les informations et crée l'interface IViewCommand appropriée.
Normalement, une application Struts transmet des paramètres sur un tel chemin, par le biais d'une chaîne de requête portant sur l'URL HTTP. Souvent, les actions contenant ces chemins sont générées à partir de balises fournies par Struts. Les exemples les plus frappants sont les balises des éléments HTML <link> et <form>. Pour les portlets Struts IBM, l'attribut urlType doit être inséré dans les balises <html:form>, <html:link> et <html:rewrite> pour prendre en charge les différents types d'URI. Il admet les valeurs suivantes :
- return - Crée une URL de retour du portlet indiquant le demandeur du portlet. Par exemple, cette URL peut s'avérer utile pour créer une action sur les formulaires qui permet de faire repasser un utilisateur du mode Edition au mode Affichage.
- standard - Crée une URL de portlet standard.
-
<link rel="stylesheet" type="text/css" href="<html:rewrite page='/assets/styles/base.css'/>">
- <html:form> (Portlets standard)
<html:form action="/saveConfiguration.do" portletMode="view">
Feuilles de style
La plupart des applications Struts existantes utilisent la balise de réécriture (rewrite) afin de créer un élément link pour une feuille de style en cascade. Selon les documentations, la balise rewrite n'est pas destinée à cette opération, mais plutôt à la création du même chemin que la balise link sans l'élément <a>. Puisque la structure de portlet Struts doit modifier le mode de création des liens, la balise rewrite nécessite d'être personnalisée pour pouvoir créer des éléments link pour des feuilles de style. La balise rewrite créera alors la même balise que la balise link, sauf lorsque les références à une page ou à une opération forward renvoient à un fichier CSS. Dans le cas où un fichier CSS est référencé, la balise rewrite sera utilisée dans la mise en oeuvre Jakarta Struts, qui résulte en un chemin vers un fichier CSS. Voici des exemples de création d'éléments link pour des feuilles de style utilisant la structure de portlet Struts.
- Utilisation d'une opération forward
-
<link rel="stylesheet" type="text/css" href="<html:rewrite forward='baseStyle'/>"> - Utilisation d'une page
-
<link rel="stylesheet" type="text/css" href="<html:rewrite page='/basestyle.css'/>"> - Utilisation de balises de portlet
-
<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="api" %> <api:init /> <link rel="stylesheet" type="text/css" href="<%= portletResponse.encodeURL( basestyle.css ) %>">
Prise en charge des marquages
La bibliothèque de balises Struts a été modifiée pour permettre la prise en charge de langages de marquage supplémentaires, supportés par HCL DX Portal. Pour HTML, les balises de création de liens ont été modifiées afin de prendre en charge les URI de portlet. Pour plus de détails, reportez-vous à la sous-section Création d'URI de portlet. Faites également attention aux restrictions relatives aux sorties HTML décrites dans les Principes de marquage
Dans certains cas, il est possible que les pages JSP d'une application Struts doivent s'exécuter à la fois dans l'environnement de servlet et dans celui du portlet. Pour cette raison, les balises de niveau de page sont mise en oeuvre dans des bibliothèques de balises. L'application Struts peut les utiliser dans ses pages JSP, mais les balises ne généreront pas de marquage lors de leur exécution dans HCL DX Portal.
Evitez également de définir la couleur et les polices. Le serveur de portail prend en charge les habillages et les thèmes qui donnent à la page une conception cohérente. La page JSP peut être créée de manière à respecter les conventions du thème grâce à l'utilisation de la feuille de style appropriée.
- Utilisation des balises cHTML
- Les balises cHTML s'utilisent quasiment comme les balises HTML. Le nom du fichier de bibliothèque de balises cHTML est
struts-chtml.tld. Voici un exemple de définition du paramètre taglib cHTML:<%@ taglib uri="/WEB-INF/struts-chtml.tld" prefix="chtml" %> - Utilisation des balises WML
- Ces balises ont été récemment ajoutées afin que vous puissiez créer une expérience utilisateur dans le domaine des unités WAP. Elles s'utilisent quasiment comme les balises HTML de Struts. Pour qu'une page JSP puisse accéder à ces balises, entrez l'instruction suivante:
<%@ taglib uri="/WEB-INF/struts-wml.tld" prefix="wml" %>Les balises WML fournies avec cette distribution s'utilisent quasiment comme les balises HTML de Struts. Le nom du fichier de bibliothèque de balises WML est struts-wml.tld. Voici un exemple de la version WML de la page index.jsp .
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-wml.tld" prefix="wml" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <p> <wml:link page="/editRegistration.do?action=Create"> <bean:message key="index.registration"/> </wml:link> <br/> <wml:link page="/logon.jsp"> <bean:message key="index.logon"/> </wml:link> <br/> <wml:link page="/tour.do"> <bean:message key="index.tour"/> </wml:link> </p>Voir Conseils relatifs à la sortie des portlets et au paragraphe Guide de marquage - WML pour obtenir des instructions générales sur la fourniture du marquage WML.
Contrairement à HTML, WML n'a pas d'élément <form>. Struts utilise pourtant la balise <form> pour déterminer la portée des paramètres et prendre en charge les beans form. C'est pourquoi la mise en œuvre de WML inclut également une balise <form> qui permet de prendre en charge certaines fonctions de Struts dans WML. La balise <form> de la bibliothèque de balises WML considère une action comme un attribut. Voici un exemple de formulaire dans WML.
Figure 1. Exemple de formulaire pour WML <wml:form action="/logon"> <do type="options" label="send"> <wml:go method="post"> <postfield name="username" value="$username"/> <postfield name="password" value="$password"/> </wml:go> </do> <bean:message key="prompt.username"/><wml:text property="username"/> <bean:message key="prompt.password"/> <wml:password property="password" size="16" maxlength="16"/> </p> </wml:form>Les pages JSP associées à l'exemple Struts en HTML ont dû être modifiées pour le marquage WML. Cet exemple illustre également l'utilisation de la bibliothèque de balises WML. Vous trouverez ces pages JSP dans le répertoire /wml/view du fichier PortalStrutsExample.war décompressé.
Les balises de cette bibliothèque WML du portlet Struts peuvent renvoyer une exception
JspExceptionau moment de l'exécution. Il est possible de déclarer une page d'erreur à l'aide de l'instruction<%@ page %>afin de détecter l'exception et de fournir des informations sur la condition de l'erreur. L'exception réelle est transmise en tant qu'attribut dans l'objet de requête avec la cléorg.apache.struts.action.EXCEPTION.Vous trouverez, ci-après, une courte description de chaque balise. voir Descriptions détaillées des balises WML Struts pour en savoir plus.
Tableau 1. Récapitulatif des balises WML pour les portlets Struts Balise Description <wml:cancel/> Affiche un élément <postfield>WML avec une valeurcancel.<wml:card/> Génère un élément de carte WML. <wml:errors/> Extrait l'ensemble des messages d'erreur de l'objet de requête associé à la clé par défaut Action.ERROR_KEYou à la valeur spécifiée par le nom d'attribut.<wml:form/> Ne génère aucun marquage, mais sert à déterminer la portée des beans et des transactions. <wml:go/> Génère un élément WML <go>. <wml:head/> Génère un élément WML <head> associé aux attributs de langue extraits de l'objet Locale en cours de l'utilisateur, s'il existe. <wml:link/> Génère un élément WML <a> en tant qu'hyperlien vers l'URL spécifiée. <wml:option/> Génère un élément WML <option>, représentant un des choix possibles pour un élément <select> englobant. <wml:options/> Génère un ensemble d'éléments WML <option>, représentant les choix possibles associés à un élément <select>. <wml:password/> Génère un élément WML <input> de type mot de passe, alimenté par la valeur spécifiée ou la propriété indiquée du bean associé au formulaire en cours. <wml:postfield/> Génère un élément WML <postfield>. <wml:rewrite/> Génère un identificateur URI de requête respectant exactement les mêmes règles que la balise de lien, sans que soit créé l'hyperlien <a>. <wml:select/> Génère un élément WML <select>, associé à une propriété de bean spécifiée par les attributs. <wml:text/> Génère un élément WML <input> de type texte, alimenté par la valeur spécifiée ou la propriété indiquée du bean associé au formulaire en cours. <wml:wml/> Génère un élément <wml>.