Struts 2 (table Des Matieres)

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Struts 2 (table Des Matieres) as PDF for free.

More details

  • Words: 7,734
  • Pages: 10
Les exemples cités tout au long de cet ouvrage sont téléchargeables à l'adresse suivante : http://www.editions-eni.fr. Saisissez la référence ENI de l'ouvrage EI2STRU dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le lien de téléchargement.

Chapitre 1

Présentation 1. Qu'est-ce qu'un framework ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2. Pourquoi utiliser un framework ? . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1 Normes et standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 Framework et développement web . . . . . . . . . . . . . . . . . . . . . 13 3. Les différents frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4. Quel framework choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5. Introduction à la programmation Java Entreprise Edition . . . . . . . . 15 6. Struts 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7. Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 8. Installation du framework Struts 2. . . . . . . . . . . . . . . . . . . . . . . . . 20 9. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Chapitre 2

Modèle de conception MVC et Java EE 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2. Premier projet MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3. Projet MVC avec filtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2

Struts 2 Le framework de développement d'applications Java EE Chapitre 3

Commencer avec Struts 2 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2. Fonctionnement général de Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . 42 3. Les intercepteurs Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4. Le fichier de configuration struts.xml . 4.1 La balise <package/> . . . . . . . . . 4.2 La balise . . . . . . . . . . 4.3 La balise . . . . . . . . . . 4.4 La balise . . . . . . . . . . . 4.5 La balise <param/> . . . . . . . . . . 4.6 La balise . . . . . . . . 4.7 La balise . . . . . 4.8 La balise . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

45 46 47 48 49 51 51 52 52

5. Architecture Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6. Les fichiers de propriétés struts.properties et default.properties . . . 55 7. Le fichier de propriétés de l'application web.xml. . . . . . . . . . . . . . . 59 8. Le fichier de configuration struts-default.xml . . . . . . . . . . . . . . . . . 60 9. Une première application Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 10. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Chapitre 4

Gestion des traces et débogage 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2. Gestion du débogage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3. Gestion du profilage (Profiling). . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

3

Table des matières Chapitre 5

Gestion des actions 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2. Classes d'action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3. Gestion des ressources . . . . . . . . . . . . . 3.1 Accès aux ressources par classe . . . 3.2 Accès aux ressources par interface . 3.3 Passage de paramètres . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

84 85 86 91

4. Gestion dynamique du mapping. . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5. Invocation dynamique de méthodes . . . . . . . . . . . . . . . . . . . . . . . . 98 6. Gestion des résultats. . . . . . . . . . 6.1 Redirection avec paramètres 6.2 Redirection sans paramètre . 6.3 Redirection vers action . . . . 6.4 Redirection chaînée . . . . . . . 6.5 FreeMarker et Velocity . . . . 6.6 HttpHeader . . . . . . . . . . . . . 6.7 Stream . . . . . . . . . . . . . . . . 6.8 XSLT. . . . . . . . . . . . . . . . . . 6.9 PlainText. . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

102 104 104 108 111 112 113 114 114 114

7. Gestion des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 8. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Chapitre 6

Bibliothèque de tag Struts 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2. Les 2.1 2.2 2.3

tags de formulaire . . . . . . . . . . . . . . . . . . . . . . . La balise <s:form/> . . . . . . . . . . . . . . . . . . . . Les thèmes de présentation et l’attribut theme La balise <s:textfield/>. . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

121 122 124 127

4

Struts 2 Le framework de développement d'applications Java EE 2.4 La balise <s:password/> . . . . . . . . . . . 2.5 La balise <s:submit/>. . . . . . . . . . . . . 2.6 La balise <s:reset/> . . . . . . . . . . . . . . 2.7 La balise <s:label/> . . . . . . . . . . . . . . 2.8 La balise <s:head/> . . . . . . . . . . . . . . 2.9 La balise <s:textarea/> . . . . . . . . . . . . 2.10 La balise <s:checkbox/> . . . . . . . . . . . 2.11 La balise <s:select/> . . . . . . . . . . . . . . 2.12 La balise <s:optgroup/> . . . . . . . . . . . 2.13 La balise <s:radio/> . . . . . . . . . . . . . . 2.14 La balise <s:checkboxlist/> . . . . . . . . 2.15 Les autres balises de formulaire Struts .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

127 128 129 130 130 130 131 133 139 142 146 149

3. Les tags de contrôle . . . . . . . . . . . . . . . . . . . . . . . 3.1 La balise <s:property/> . . . . . . . . . . . . . . . . 3.2 La balise <s:a/> . . . . . . . . . . . . . . . . . . . . . . 3.3 La balise <s:action/> . . . . . . . . . . . . . . . . . . 3.4 La balise <s:param/> . . . . . . . . . . . . . . . . . . 3.5 La balise <s:bean/> . . . . . . . . . . . . . . . . . . . 3.6 La balise <s:date/> . . . . . . . . . . . . . . . . . . . . 3.7 La balise <s:set/> . . . . . . . . . . . . . . . . . . . . . 3.8 La balise <s:push/> . . . . . . . . . . . . . . . . . . . 3.9 La balise <s:url/> . . . . . . . . . . . . . . . . . . . . . 3.10 Les balises <s:if/>, <s:else/> et <s:elseif/>. 3.11 La balise <s:iterator/> . . . . . . . . . . . . . . . . . 3.12 La balise <s:append/> . . . . . . . . . . . . . . . . . 3.13 La balise <s:sort/> . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

150 150 153 153 154 155 156 157 158 158 158 159 163 165

4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

5

Table des matières Chapitre 7

Messages et internationalisation 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 2. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 3. Accès aux propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 4. Données multilingues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 5. Sélection dynamique des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 182 6. Accès aux ressources dans les classes. . . . . . . . . . . . . . . . . . . . . . . 184 7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Chapitre 8

Validation des entrées 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 3. Validations . . . . . . . . . . . . . . . . . . 3.1 required. . . . . . . . . . . . . . . . . 3.2 requiredstring . . . . . . . . . . . . 3.3 stringlength. . . . . . . . . . . . . . 3.4 int . . . . . . . . . . . . . . . . . . . . . 3.5 date. . . . . . . . . . . . . . . . . . . . 3.6 e-mail . . . . . . . . . . . . . . . . . . 3.7 url . . . . . . . . . . . . . . . . . . . . . 3.8 regex . . . . . . . . . . . . . . . . . . . 3.9 fieldexpression et expression . 3.10 conversion . . . . . . . . . . . . . . . 3.11 visitor . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

195 195 195 195 197 197 197 199 199 200 203 205

4. Mise en place d'un exemple complet. . . . . . . . . . . . . . . . . . . . . . . 206 5. Gestion des messages d'erreurs et succès . . . . . . . . . . . . . . . . . . . . 212

6

Struts 2 Le framework de développement d'applications Java EE 6. Écrire un validateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 L'interface Validator et les classes ValidatorSupport et FieldValidatorSupport . . . . . . . . . . . . . . . . . . . . . 6.2 Déclarer les validateurs . . . . . . . . . . . . . . . . . . . . . . 6.3 Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Validation dans les classes d’action . . . . . . . . . . . . .

. . . . . . . 219 . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

219 220 221 228

7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Chapitre 9

Gestion des types et conversions 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 2. Gestion des conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 3. Gestion des types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 4. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Chapitre 10

Couche modèle et accès aux données 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 2. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 3. L’intercepteur Preparable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 4. Accès et manipulation de données . . . . . . . . . . . . . . . . . . . . . . . . 259 4.1 Le modèle Data Access Object DAO . . . . . . . . . . . . . . . . . . . 260 5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Table des matières Chapitre 11

Gestion de l'upload ou chargement de données 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 2. La balise <s:file/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 3. L’intercepteur fileUpload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 4. Chargement unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 5. Chargement multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 6. Chargement en Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Chapitre 12

Gestion du téléchargement de données 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 2. Résultat stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 3. Téléchargement dynamique de fichiers . . . . . . . . . . . . . . . . . . . . . 306 4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Chapitre 13

Gestion des chargements de pages 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Chapitre 14

Développer des intercepteurs 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 2. Écrire un intercepteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

7

8

Struts 2 Le framework de développement d'applications Java EE 3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Chapitre 15

Développer des résultats 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 2. Écrire un résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Chapitre 16

Gérer le double clic ou double envoi 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 2. Mise en place du jeton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Chapitre 17

Struts et Ajax JQuery 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 2. Installation du framework JavaScript . . . . . . . . . . . . . . . . . . . . . . 342 3. Technologie Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 4. Optimisations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Utilisation de boutons dynamiques . . . . . . . . . . . . . . . . . . . . 4.2 Gestion des boîtes (box) dynamiques pour les confirmations et messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Utilisation du plug-in Widget . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Utilisation d’outils dynamiques. . . . . . . . . . . . . . . . . . . . . . . 4.5 Utilisation d’un service d’autocomplétion pour les recherches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Gestion des tris dynamiques . . . . . . . . . . . . . . . . . . . . . . . . .

353 353 355 358 364 368 377

5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

9

Table des matières Chapitre 18

Les moteurs de templates 1. Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 2. Utilisation de Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 3. FreeMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Chapitre 19

XSLT 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 2. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Chapitre 20

Plug-ins Struts 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 2. Le plug-in JFreeChart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 3. Le plug-in Tiles. . . . . . . . . . . . . . . . . . 3.1 Page de mise en forme du modèle 3.2 Définition du modèle . . . . . . . . . 3.3 Mise en place du plug-in Tiles . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

409 412 413 415

4. Écrire un plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 5. Utiliser le plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 6. Les autres plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

Struts 2

10

Le framework de développement d'applications Java EE Chapitre 21

Struts sans configuration 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 3. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Annotations d’actions . . . . . . . . . . . . . . . . . . 3.3 Annotations de résultats . . . . . . . . . . . . . . . . 3.4 Annotations d’intercepteurs . . . . . . . . . . . . . 3.5 Annotations d’espace de nommage . . . . . . . . 3.6 Annotations des vues . . . . . . . . . . . . . . . . . . 3.7 Annotations des exceptions. . . . . . . . . . . . . . 3.8 Chargement automatique des configurations.

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

428 429 429 432 432 437 438 438 439

4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Annexe 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 2. Intercepteurs Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 3. Object-Graph Navigation Language OGNL. . . . . . . . . . . . . . . . . . 444 4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

Related Documents