Le tag panel est un tag basique qui crée un container pour du texte, etc. Par exemple, le contenu du tag <form> est affiché dans un panel.
Le code HTML est généré par une classe implémentant l'interface du panel. Il y a deux implémentations de l'interface du panel : une simple, par défaut, qui utilise uniquement des tableaux (fr.improve.struts.taglib.layout.util.BasicPanel), et une autre qui utilise des images (fr.improve.struts.taglib.layout.util.ImagePanel). La classe à utiliser peut être spécifiée en mettant la valeur de la propriété panel.class du fichier de propriétés du skin au nom de la classe d'implémentation du panel.
<layout:panel styleClass="FORM" key="title"> <layout:message key="line1"/> <layout:message key="line2"/> </layout:panel>
Résultat (utilisant la classe par défaut)

La classe ImagePanel permet d'utiliser des images comme bordure du panel. Voici un exemple avec des coins arrondis :

Le nom des images doit être spécifié dans le fichier des propriétés du skin struts-layout. Ce fichier doit contenir le chemin d'accès aux clés des images suivantes :
Il est possible d'utiliser différents fichiers de propriétés en fonction du skin et de la classe du style CSS. Le site http://www.application-servers.com utilise la classe ImagePanel avec différents fichiers .properties. Pour plus d'informations concernant le fichier de configuration, voir la page sur les skins.
Depuis struts-layout 0.5 il est possible de placer des panels et des collections dans des panels sans ajouter de code HTML supplémentaire.
Exemple :
<%@page import="fr.improve.struts.webapp.layout.example.User,java.util.Vector" %>
<%@taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
<% Vector v = new Vector();
User user = new User();
user.setFullName("John Smith");
user.setUsername("jsmith");
user.setFromAddress("jsmith@mail.yahoo.com");
user.setReplyToAddress("jsmith@mail.yahoo.com");
User user2 = new User();
user2.setFullName("Jean Durand");
user2.setUsername("jdurand");
user2.setFromAddress("jdurand@mail.hotmail.fr");
user2.setReplyToAddress("jdurand@mail.yahoo.com");
v.add(user); v.add(user2); pageContext.setAttribute("users", v);
%>
<layout:html>
<layout:form action="registration.do" styleClass="FORM" key="Main form">
<layout:panel styleClass="FORM" key="Nested panel" width="100%" align="center">
<layout:panel styleClass="FORM" key="Nested panel" width="100%" align="center">
<layout:text key="property1" property="action" styleClass="FIELD"/>
<layout:text key="property2" property="action" styleClass="FIELD"/>
</layout:panel>
<layout:text key="property3" property="action" styleClass="FIELD"/>
</layout:panel>
<layout:collection name="users" styleClass="FORM" align="center" width="100%">
<layout:collectionItem title="Name" property="fullName"/>
<layout:collectionItem title="Login" property="username"/>
<layout:collectionItem title="Login" property="username"/>
<layout:collectionItem title="From address" property="fromAddress"/>
<layout:collectionItem title="Reply toaddress" property="replyToAddress"/>
</layout:collection>
</layout:form>
</layout:html>
Résultat . (l'espace entre les lignes peut être réglé grâce aux propriétés CSS).
| Nom de l'attribut | Description |
|---|---|
| align | - |
| arg0 | - |
| arg0Name | - |
| arg0Property | - |
| arg1 | - |
| arg2 | - |
| arg3 | - |
| arg4 | - |
| bundle | La clé de l'instance de MessageResources à utiliser. Si non spécifié, choisit par défaut l'application resources configuré pour la servlet action. |
| key | Clé du message à utiliser pour le titre du panel. |
| name | - |
| property | - |
| width | - |
| styleClass | Classe du style CSS à utiliser pour afficher le panel. |
Rend un formulaire. Un formulaire ressemble à un panel, mais inclut un tag html form. On peut y placer dedans des tags layout, collection or input. Si l'action du formulaire est une DispatchAction, la valeur par défaut du paramètre peut être spécifiée en indiquant l'attribut reqCode (request code). Cette valeur peut être changée en spécifiant l'attribut reqCode dans les boutons submit placés dans ce tag.
Le mode d'affichage du formulaire peut être spécifié en utilisant FormUtils.setFormDisplayMode(HttpServletRequest in_request, ActionForm in_form, int in_mode).
Tous les tags input supportent un attribut mode qui peut prendre les valeurs suivantes : X,Y,Z. X est le mode d'affichage du champ en mode création (creation mode), Y en mode édition (edit mode) et Z en mode consultation (inspect mode). Les valeurs autorisées sont E (edit), I (inspect, la valeur du champ est envoyée est envoyée comme une partie des données du formulaire), N (not displayed), H (hidden).
| Nom de l'attribut | Description |
|---|---|
| action | URL à laquelle ce formulaire sera soumis. Permet également de choisir l'ActionMapping, qui permet d'obtenir le bean associé au formulaire. |
| align | Alignement du panel de ce formulaire. Par défaut : CENTER. |
| bundle | La clé de l'instance de MessageResources à utiliser. Si non spécifié, choisit par défaut l'application resources configuré pour la servlet action. |
| enctype | Type d'encodage à utiliser pour soumettre ce formulaire, si la méthode est POST. Cet attribut doit valoir "multipart/form-data" si vous utilisez le tag file qui permet l'upload de fichiers. Si non spécifié, l'ncodage par défaut du navigateur est utilisé ("application/x-www-form-urlencoded"). |
| focus | Nom du champ de ce formulaire sur lequel sera mis le focus initial grâce à une fonction JavaScript. Si non spécifié, aucun code JavaScript ne sera généré pour le focus initial. [EL] |
| key | Clé du message à utiliser comme titre du formulaire. Le suffixe ".edit", ".create" ou ".inspect" est automatiquement ajouté à la fin de la clé en fonction du mode d'affichage du formulaire et si la clé résultant existe dans les messages. |
| method | Méthode HTTP qui sera utilisée pour soumettre cette requête (GET, POST). Par défaut : POST. |
| name | Nom de ce formulaire. |
| onreset, onsubmit | Gestionnaires d'événements JavaScript. |
| reqCode | Valeur du paramètre de l'action dans le cas d'une action héritant de la classe DispatchAction. |
| scope | - |
| style | Style CSS à utiliser pour afficher ce formulaire. |
| styleClass | Classe du style CSS à utiliser pour afficher ce formulaire. |
| target | Fenêtre dans laquelle ce fomulaire est soumis (comme par exemple un cadre). |
| type | - |
| width | Largeur du panel de ce formulaire. |
| acceptCharset | Jeux de caractères acceptés. |
| scheme | Génère une URL action URL absolue avec le scheme spécifié (http/https) [EL] |
Le tag popup peut être utilisé pour créer des fenêtre modales. Le popup s'ouvre et se ferme par Javascript.
| Nom | Description |
|---|---|
| arg0, arg1, arg2, arg3, arg4 | Paramètres optionnels des messages. [EL] |
| key | Clé du message composant le titre du popup |
| styleClass | Classe css du panel |
| styleId | Identifiant Javascript du popup |
<body>
<layout:button onclick="openStrutsLayoutPopup('myPopup');">Open the popup</layout:button>
<layout:popup styleClass="PANEL" styleId="myPopup">
<layout:message key="some.message.key"/>
<layout:button onclick="closeStrutsLayoutPopup('myPopup');">OK</layout:button>
</layout:popup>
</body>