Practical JSF in Java EE 8 Michael Müller pdf
download
https://textbookfull.com/product/practical-jsf-in-java-
ee-8-michael-muller/
Download more ebook instantly today - get yours now at textbookfull.com
We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!
The Definitive Guide to JSF in Java EE 8: Building Web
Applications with JavaServer Faces Bauke Scholtz
https://textbookfull.com/product/the-definitive-guide-to-jsf-in-
java-ee-8-building-web-applications-with-javaserver-faces-bauke-
scholtz/
Building RESTful Web Services with Java EE 8 Create
modern RESTful web services with the Java EE 8 API
Mario-Leander Reimer
https://textbookfull.com/product/building-restful-web-services-
with-java-ee-8-create-modern-restful-web-services-with-the-java-
ee-8-api-mario-leander-reimer/
Beginning EJB in Java EE 8: Building Applications with
Enterprise JavaBeans Jonathan Wetherbee
https://textbookfull.com/product/beginning-ejb-in-java-
ee-8-building-applications-with-enterprise-javabeans-jonathan-
wetherbee/
Pro JPA 2 in Java EE 8: An In-Depth Guide to Java
Persistence APIs - Third Edition Mike Keith
https://textbookfull.com/product/pro-jpa-2-in-java-ee-8-an-in-
depth-guide-to-java-persistence-apis-third-edition-mike-keith/
Java EE 7 Development with NetBeans 8 1st Edition
Heffelfinger David R
https://textbookfull.com/product/java-ee-7-development-with-
netbeans-8-1st-edition-heffelfinger-david-r/
Pro CDI 2 in Java EE 8 - An In-Depth Guide to Context
and Dependency Injection. 1st Edition Jan Beernink
https://textbookfull.com/product/pro-cdi-2-in-java-ee-8-an-in-
depth-guide-to-context-and-dependency-injection-1st-edition-jan-
beernink/
Beginning JSP JSF and Tomcat Java Web Development
Expert s Voice in Java 2 New Edition Zambon Giulio
https://textbookfull.com/product/beginning-jsp-jsf-and-tomcat-
java-web-development-expert-s-voice-in-java-2-new-edition-zambon-
giulio/
Pro CDI 2 in Java EE 8 An In Depth Guide to Context and
Dependency Injection 1st Edition Jan Beernink Arjan
Tijms
https://textbookfull.com/product/pro-cdi-2-in-java-ee-8-an-in-
depth-guide-to-context-and-dependency-injection-1st-edition-jan-
beernink-arjan-tijms/
Java EE Development with Eclipse - Second Edition Ram
Kulkarni
https://textbookfull.com/product/java-ee-development-with-
eclipse-second-edition-ram-kulkarni/
Practical JSF
in Java EE 8
Web Applications in Java
for the Enterprise
—
Michael Müller
Practical JSF in Java EE 8
Web Applications in Java
for the Enterprise
Michael Müller
Practical JSF in Java EE 8: Web Applications in Java for the Enterprise
Michael Müller
Brühl, Nordrhein-Westfalen, Germany
ISBN-13 (pbk): 978-1-4842-3029-9 ISBN-13 (electronic): 978-1-4842-3030-5
https://doi.org/10.1007/978-1-4842-3030-5
Library of Congress Control Number: 2018941459
Copyright © 2018 by Michael Müller
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Steve Anglin
Development Editor: Matthew Moodie
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and
the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM
Finance Inc is a Delaware corporation.
For information on translations, please e-mail rights@apress.com, or visit http://www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book's product page, located at www.apress.com/9781484230299. For more
detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
To my wife Claudia and my kids:
Thank you for your patience during night-writing
and other long sessions.
I love you.
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv
About the Technical Reviewer�������������������������������������������������������������������������������xvii
Acknowledgments��������������������������������������������������������������������������������������������������xix
Preface�������������������������������������������������������������������������������������������������������������������xxi
Part I: TinyCalculator....................................................................................... 1
Chapter 1: TinyCalculator����������������������������������������������������������������������������������������� 3
Creating the Application���������������������������������������������������������������������������������������������������������������� 3
Working with TinyCalculator������������������������������������������������������������������������������������������������������� 14
Managed Beans��������������������������������������������������������������������������������������������������������������������� 14
The Page�������������������������������������������������������������������������������������������������������������������������������� 18
The Relationship Between Code and View���������������������������������������������������������������������������� 19
Summary������������������������������������������������������������������������������������������������������������������������������������ 20
Chapter 2: Foundations������������������������������������������������������������������������������������������ 21
Web Applications������������������������������������������������������������������������������������������������������������������������� 21
HTTP�������������������������������������������������������������������������������������������������������������������������������������������� 22
HTML������������������������������������������������������������������������������������������������������������������������������������������� 24
CSS��������������������������������������������������������������������������������������������������������������������������������������������� 26
JavaScript����������������������������������������������������������������������������������������������������������������������������������� 27
Java�������������������������������������������������������������������������������������������������������������������������������������������� 28
Maven����������������������������������������������������������������������������������������������������������������������������������������� 29
Selenium and Arquillian�������������������������������������������������������������������������������������������������������������� 29
Servlet����������������������������������������������������������������������������������������������������������������������������������������� 29
Deployment��������������������������������������������������������������������������������������������������������������������������������� 33
Summary������������������������������������������������������������������������������������������������������������������������������������ 33
v
Table of Contents
Chapter 3: JavaServer Faces���������������������������������������������������������������������������������� 35
View Definition Language����������������������������������������������������������������������������������������������������������� 36
Web vs. Traditional Application��������������������������������������������������������������������������������������������������� 36
JSF Lifecycle Overview��������������������������������������������������������������������������������������������������������������� 39
JSF Namespaces and Tags��������������������������������������������������������������������������������������������������������� 41
Component Tree�������������������������������������������������������������������������������������������������������������������������� 43
Navigation����������������������������������������������������������������������������������������������������������������������������������� 47
Summary������������������������������������������������������������������������������������������������������������������������������������ 48
Chapter 4: Expression Language���������������������������������������������������������������������������� 49
Unified Expression Language������������������������������������������������������������������������������������������������������ 49
Value Expression������������������������������������������������������������������������������������������������������������������������� 51
Operators������������������������������������������������������������������������������������������������������������������������������� 51
Dot and Square Bracket�������������������������������������������������������������������������������������������������������� 53
Method Expression��������������������������������������������������������������������������������������������������������������������� 53
Implicit Objects��������������������������������������������������������������������������������������������������������������������������� 53
Summary������������������������������������������������������������������������������������������������������������������������������������ 55
Chapter 5: HTML-Friendly Markup������������������������������������������������������������������������� 57
HTML-Friendly TinyCalculator����������������������������������������������������������������������������������������������������� 57
Summary������������������������������������������������������������������������������������������������������������������������������������ 60
Chapter 6: Configuration Files�������������������������������������������������������������������������������� 61
pom.xml�������������������������������������������������������������������������������������������������������������������������������������� 61
web.xml�������������������������������������������������������������������������������������������������������������������������������������� 62
faces-config.xml������������������������������������������������������������������������������������������������������������������������� 64
beans.xml����������������������������������������������������������������������������������������������������������������������������������� 65
persistence.xml��������������������������������������������������������������������������������������������������������������������������� 65
glassfish-resources.xml�������������������������������������������������������������������������������������������������������������� 65
glassfish-web.xml����������������������������������������������������������������������������������������������������������������������� 66
Other Files����������������������������������������������������������������������������������������������������������������������������������� 67
Summary������������������������������������������������������������������������������������������������������������������������������������ 67
vi
Table of Contents
Chapter 7: Testing with Selenium��������������������������������������������������������������������������� 69
Selenium Overview��������������������������������������������������������������������������������������������������������������������� 69
Preparing TinyCalculator������������������������������������������������������������������������������������������������������������� 70
Creating the Test������������������������������������������������������������������������������������������������������������������������� 71
Unit Test without Selenium��������������������������������������������������������������������������������������������������������� 80
Summary������������������������������������������������������������������������������������������������������������������������������������ 82
Chapter 8: TinyCalculator Recap���������������������������������������������������������������������������� 83
Part II: Books................................................................................................. 85
Chapter 9: Preparing for Java EE 8������������������������������������������������������������������������ 87
Current Evolution������������������������������������������������������������������������������������������������������������������������ 87
Upgrade the Application Server�������������������������������������������������������������������������������������������������� 88
Payara Server����������������������������������������������������������������������������������������������������������������������������� 90
Summary������������������������������������������������������������������������������������������������������������������������������������ 91
Chapter 10: Introducing the Books Application������������������������������������������������������ 93
Books Requirements������������������������������������������������������������������������������������������������������������������� 93
Development Order��������������������������������������������������������������������������������������������������������������������� 95
Summary������������������������������������������������������������������������������������������������������������������������������������ 97
Chapter 11: Starting the Books App����������������������������������������������������������������������� 99
Page Layout�������������������������������������������������������������������������������������������������������������������������������� 99
HTML Structure������������������������������������������������������������������������������������������������������������������� 100
Basic Styling with CSS�������������������������������������������������������������������������������������������������������� 103
Design First Data Model������������������������������������������������������������������������������������������������������������ 113
First Dialog Box (Repeating Structure)�������������������������������������������������������������������������������������� 115
Summary���������������������������������������������������������������������������������������������������������������������������������� 123
Chapter 12: Java Persistence API������������������������������������������������������������������������� 125
Entities�������������������������������������������������������������������������������������������������������������������������������������� 125
Persistence Unit������������������������������������������������������������������������������������������������������������������������ 130
Data Source������������������������������������������������������������������������������������������������������������������������� 135
Entity Manager�������������������������������������������������������������������������������������������������������������������� 137
vii
Table of Contents
Service Class���������������������������������������������������������������������������������������������������������������������������� 137
Using the CategoryService/Injection����������������������������������������������������������������������������������������� 142
Summary���������������������������������������������������������������������������������������������������������������������������������� 144
Chapter 13: JSF Templating���������������������������������������������������������������������������������� 145
Templating Books���������������������������������������������������������������������������������������������������������������������� 145
Summary���������������������������������������������������������������������������������������������������������������������������������� 151
Chapter 14: Going International��������������������������������������������������������������������������� 153
Internationalization and Localization���������������������������������������������������������������������������������������� 153
Welcome Page�������������������������������������������������������������������������������������������������������������������������� 154
Message Bundle������������������������������������������������������������������������������������������������������������������ 154
Naive Welcome Page Implementation��������������������������������������������������������������������������������� 162
Use Paragraphs and <ui:repeat>���������������������������������������������������������������������������������������� 164
Language Switcher������������������������������������������������������������������������������������������������������������������� 166
Localized Content���������������������������������������������������������������������������������������������������������������������� 168
Preparing the Administer Area�������������������������������������������������������������������������������������������� 169
Include into Page����������������������������������������������������������������������������������������������������������������� 169
Common Navigation������������������������������������������������������������������������������������������������������������ 172
Topics���������������������������������������������������������������������������������������������������������������������������������� 173
Enhancing the Category Entity�������������������������������������������������������������������������������������������� 185
The Category Translation Page�������������������������������������������������������������������������������������������� 191
Summary���������������������������������������������������������������������������������������������������������������������������������� 194
Chapter 15: Bean Validation��������������������������������������������������������������������������������� 195
Book Entity�������������������������������������������������������������������������������������������������������������������������������� 196
Book Editor�������������������������������������������������������������������������������������������������������������������������������� 198
Summary���������������������������������������������������������������������������������������������������������������������������������� 200
Chapter 16: Contexts and Dependency Injection�������������������������������������������������� 201
From new() to CDI��������������������������������������������������������������������������������������������������������������������� 201
Summary���������������������������������������������������������������������������������������������������������������������������������� 204
viii
Table of Contents
Chapter 17: Conversation Scope�������������������������������������������������������������������������� 205
Multi-page Editor���������������������������������������������������������������������������������������������������������������������� 205
POST and GET Navigation��������������������������������������������������������������������������������������������������������� 209
Begin and End the Conversation����������������������������������������������������������������������������������������������� 210
Summary���������������������������������������������������������������������������������������������������������������������������������� 210
Chapter 18: Links������������������������������������������������������������������������������������������������� 211
Internal Reviews����������������������������������������������������������������������������������������������������������������������� 211
External Reviews���������������������������������������������������������������������������������������������������������������������� 213
JSF Links���������������������������������������������������������������������������������������������������������������������������������� 215
commandLink���������������������������������������������������������������������������������������������������������������������� 215
link��������������������������������������������������������������������������������������������������������������������������������������� 215
outputLink��������������������������������������������������������������������������������������������������������������������������� 216
Choosing the Right Link������������������������������������������������������������������������������������������������������� 216
Draw the Conclusion����������������������������������������������������������������������������������������������������������� 219
Summary���������������������������������������������������������������������������������������������������������������������������������� 220
Chapter 19: Responsive Design���������������������������������������������������������������������������� 223
Making Books Responsive�������������������������������������������������������������������������������������������������������� 223
Responsive Pixel Layouts���������������������������������������������������������������������������������������������������������� 236
Calculating Sizes����������������������������������������������������������������������������������������������������������������������� 237
Mobile-First and Desktop-First������������������������������������������������������������������������������������������������� 238
Summary���������������������������������������������������������������������������������������������������������������������������������� 239
Chapter 20: Summary and Perspective���������������������������������������������������������������� 241
Part III: Intermezzo...................................................................................... 243
Chapter 21: Intermezzo���������������������������������������������������������������������������������������� 245
Chapter 22: JSF Lifecycle Revisited��������������������������������������������������������������������� 247
ix
Table of Contents
Chapter 23: Repetitive Structures������������������������������������������������������������������������ 249
Tag Handler vs. Component������������������������������������������������������������������������������������������������������ 249
Performance Issues������������������������������������������������������������������������������������������������������������������ 254
Summary���������������������������������������������������������������������������������������������������������������������������������� 262
Part IV: Alumni............................................................................................. 263
Chapter 24: Alumni����������������������������������������������������������������������������������������������� 265
Preparing the Application���������������������������������������������������������������������������������������������������������� 265
Registration Form��������������������������������������������������������������������������������������������������������������������� 270
Summary���������������������������������������������������������������������������������������������������������������������������������� 274
Chapter 25: Validation������������������������������������������������������������������������������������������ 275
Bean Validation������������������������������������������������������������������������������������������������������������������������� 275
Creating a Customized Message����������������������������������������������������������������������������������������� 279
Details of Customized Messages����������������������������������������������������������������������������������������� 281
Null Handling����������������������������������������������������������������������������������������������������������������������� 282
Validation Method��������������������������������������������������������������������������������������������������������������������� 283
Validator������������������������������������������������������������������������������������������������������������������������������������ 284
Multi-Component Validation������������������������������������������������������������������������������������������������������ 285
Self-Made��������������������������������������������������������������������������������������������������������������������������������� 291
Summary���������������������������������������������������������������������������������������������������������������������������������� 293
Chapter 26: AJAX Components����������������������������������������������������������������������������� 295
Using AJAX for Immediate Feedback���������������������������������������������������������������������������������������� 295
Summary���������������������������������������������������������������������������������������������������������������������������������� 300
Chapter 27: Building Composite Components������������������������������������������������������ 301
Transform into a Composition��������������������������������������������������������������������������������������������������� 301
Enable Child Element for the Composition�������������������������������������������������������������������������������� 305
Pass In Validation Method��������������������������������������������������������������������������������������������������������� 308
Ubiquitous Input Component����������������������������������������������������������������������������������������������������� 310
Summary���������������������������������������������������������������������������������������������������������������������������������� 312
x
Table of Contents
Chapter 28: Secure Passwords����������������������������������������������������������������������������� 313
Hash������������������������������������������������������������������������������������������������������������������������������������������ 313
Security Issues and Mitigation�������������������������������������������������������������������������������������������������� 314
Password Algorithm������������������������������������������������������������������������������������������������������������������ 316
Summary���������������������������������������������������������������������������������������������������������������������������������� 317
Chapter 29: Data Facade�������������������������������������������������������������������������������������� 319
Abstract Data Service��������������������������������������������������������������������������������������������������������������� 319
Concrete Facade����������������������������������������������������������������������������������������������������������������������� 322
Account Entity��������������������������������������������������������������������������������������������������������������������������� 324
Summary���������������������������������������������������������������������������������������������������������������������������������� 329
Chapter 30: Activation Mail���������������������������������������������������������������������������������� 331
Config Mail Properties by Code������������������������������������������������������������������������������������������������� 331
Mail Session������������������������������������������������������������������������������������������������������������������������������ 335
Send Activation������������������������������������������������������������������������������������������������������������������������� 339
Summary���������������������������������������������������������������������������������������������������������������������������������� 341
Chapter 31: Scheduled Tasks������������������������������������������������������������������������������� 343
Scheduler���������������������������������������������������������������������������������������������������������������������������������� 343
Delete Query����������������������������������������������������������������������������������������������������������������������������� 344
Becoming Asynchronous����������������������������������������������������������������������������������������������������������� 346
Summary���������������������������������������������������������������������������������������������������������������������������������� 347
Chapter 32: Authentication and Authorization����������������������������������������������������� 349
Security Basics������������������������������������������������������������������������������������������������������������������������� 349
Basic Authentication and fileRealm������������������������������������������������������������������������������������������ 351
Form Login�������������������������������������������������������������������������������������������������������������������������������� 361
Programmatic Login������������������������������������������������������������������������������������������������������������������ 364
Programmatic Logout���������������������������������������������������������������������������������������������������������� 367
jdbcRealm��������������������������������������������������������������������������������������������������������������������������������� 367
Custom Realm��������������������������������������������������������������������������������������������������������������������������� 372
Summary���������������������������������������������������������������������������������������������������������������������������������� 377
xi
Table of Contents
Chapter 33: Account Handling������������������������������������������������������������������������������ 379
Micro Service���������������������������������������������������������������������������������������������������������������������������� 379
Account Service������������������������������������������������������������������������������������������������������������������������ 381
Testing�������������������������������������������������������������������������������������������������������������������������������������� 387
Summary���������������������������������������������������������������������������������������������������������������������������������� 388
Chapter 34: Classroom Chat (WebSockets)���������������������������������������������������������� 389
HTTP Protocol and Alternatives������������������������������������������������������������������������������������������������� 390
WebSocket�������������������������������������������������������������������������������������������������������������������������������� 391
Endpoint������������������������������������������������������������������������������������������������������������������������������ 392
Simple Chat������������������������������������������������������������������������������������������������������������������������� 393
ClassRoom Chat������������������������������������������������������������������������������������������������������������������������ 404
JSF 2.3 websocket�������������������������������������������������������������������������������������������������������������������� 411
Summary���������������������������������������������������������������������������������������������������������������������������������� 413
Chapter 35: Changing Look and Feel�������������������������������������������������������������������� 415
Resource Library����������������������������������������������������������������������������������������������������������������������� 415
Immediately Change the Look and Feel������������������������������������������������������������������������������������ 416
Read from Resources���������������������������������������������������������������������������������������������������������������� 417
Summary���������������������������������������������������������������������������������������������������������������������������������� 424
Chapter 36: Handling Constants��������������������������������������������������������������������������� 425
Navigation by Strings���������������������������������������������������������������������������������������������������������������� 425
Importing Constants������������������������������������������������������������������������������������������������������������������ 427
Summary���������������������������������������������������������������������������������������������������������������������������������� 427
Appendix A: HTML������������������������������������������������������������������������������������������������� 429
H
TML Structure������������������������������������������������������������������������������������������������������������������������� 429
HTML Header���������������������������������������������������������������������������������������������������������������������������� 430
HTML Body�������������������������������������������������������������������������������������������������������������������������������� 430
Page and Text Structure, Linking����������������������������������������������������������������������������������������� 431
Forms and Input������������������������������������������������������������������������������������������������������������������ 432
Tables���������������������������������������������������������������������������������������������������������������������������������� 434
Tag Completion/Tag Guessing��������������������������������������������������������������������������������������������������� 437
xii
Table of Contents
Appendix B: Cascading Style Sheets�������������������������������������������������������������������� 439
S
electors����������������������������������������������������������������������������������������������������������������������������������� 442
Type Selector����������������������������������������������������������������������������������������������������������������������� 442
Id Selector��������������������������������������������������������������������������������������������������������������������������� 442
Class Selector���������������������������������������������������������������������������������������������������������������������� 442
Attribute Selector���������������������������������������������������������������������������������������������������������������� 442
Nesting Selector������������������������������������������������������������������������������������������������������������������ 443
Sibling Selector������������������������������������������������������������������������������������������������������������������� 445
Box Model��������������������������������������������������������������������������������������������������������������������������������� 446
Enhanced Styling���������������������������������������������������������������������������������������������������������������������� 449
Appendix C: Tag Libraries������������������������������������������������������������������������������������� 451
P ass-through Elements������������������������������������������������������������������������������������������������������������� 452
JSF Core Library����������������������������������������������������������������������������������������������������������������������� 452
JSF HTML Library���������������������������������������������������������������������������������������������������������������������� 455
Common Attributes�������������������������������������������������������������������������������������������������������������� 458
Facelet Templating Tag Library������������������������������������������������������������������������������������������������� 458
Composite Component Tag Library������������������������������������������������������������������������������������������� 460
Pass-through Attributes������������������������������������������������������������������������������������������������������������ 461
JSP Standard Tag Library (JSTL)����������������������������������������������������������������������������������������������� 461
JSTL Functions�������������������������������������������������������������������������������������������������������������������������� 462
Appendix D: Programming Style��������������������������������������������������������������������������� 463
Appendix E: Bibliography������������������������������������������������������������������������������������� 467
Afterword�������������������������������������������������������������������������������������������������������������� 469
Index��������������������������������������������������������������������������������������������������������������������� 471
xiii
About the Author
Michael Müller is an IT professional with more than 30 years
of experience, including about 25 years in the healthcare
sector. During this time, he has worked in different areas,
especially project and product management, consulting, and
software development. He gained international knowledge
not only by targeting international markets but also by
leading external teams (from Eastern Europe and India).
Currently he is the head of software development at
the German DRG institute (http://inek.org). In this role,
he is responsible for web applications and other Java and
.NET projects. Web projects are preferably built with Java
technologies such as JSF with the help of supporting languages like JavaScript.
Michael is a professional JSF user and a member of the JSR 344 and JSR 372 (JSF)
expert groups. Due to his community activities, he was invited to join the NetBeans
Dream Team and became a member in January 2016. You may contact him through his
blog blog.mueller-bruehl.de. Follow him on Twitter at @muellermi.
xv
About the Technical Reviewer
Manuel Jordan Elera is an autodidactic developer and
researcher who enjoys learning new technologies for his
own experiments and creating new integrations.
Manuel won the 2010 Springy Award: Community
Champion and Spring Champion 2013. In his little free
time, he reads the Bible and composes music on his guitar.
Manuel is known as dr_pompeii. He has tech reviewed
numerous books for Apress, including Pro Spring Messaging
(2017), Pro Spring, 4th Edition (2014), Practical Spring LDAP
(2013), Pro JPA 2, Second Edition (2013), and Pro Spring
Security (2013).
You can read his 13 detailed tutorials about many Spring technologies and contact
him through his blog at www.manueljordanelera.blogspot.com. Follow him on Twitter
at @dr_pompeii.
xvii
Acknowledgments
All content unless otherwise mentioned is written by me. But a couple of people
provided me feedback, helped with wording, or did a technical review on TinyCalculator
and/or Books. Besides the people who are mentioned below, a special thank you to John
Wright, who also provided a couple of comments. And a special thank you to all the
other people who provided a mostly one-time feedback. All of you helped to improve
this book.
Pratap Chatterjee is a software engineer who has worked with enterprise
application software development for over 20 years, mainly in the telecommunication
industry in England with BT and T-Mobile UK as programmer, designer, developer, and
team leader with Java and web technologies. Currently Pratap lives in Sweden with his
wife and two sons. He’s working for Karolinska Institutet, one of the world’s leading
medical universities. Pratap enjoys programming, and in his role as a programmer
developer, he has written applications that help in the publication of doctoral courses
and admission of students by the university. Pratap has also reviewed technical articles
and recently reviewed Grails in Action, 2nd Edition (Manning, 2014), by Glen Smith and
Peter Ledbrook.
Constantin Marian Alin is a passionate Java developer focused on developing
web/desktop applications using the latest Java technologies. Beside daily work and
learning, in the past few years he has written and published articles for the Developer.
com and DZone communities. Currently, he’s focused on developing RIA/SPA
applications for the GIS field by integrating the power of Java frameworks like JavaServer
Faces, PrimeFaces, AngularJS, Bootstrap, RESTful, EJB, JPA, and more with the GIS
specialized software, such as ArcGIS, OpenLayers, GeoServer, Google Maps, and others.
Anghel Leonard is a senior Java developer with more than 13 years of experience
in Java SE, Java EE, and related frameworks. He’s written and published more than 50
articles about Java technologies and more than 500 tips and tricks for many websites
dedicated to programming. In addition, he’s written books including Pro Java 7 NIO.2
(Apress), Pro Hibernate and MongoDB (Apress), Tehnologii XML XML în Java (Albastra),
Jboss Tools 3 Developer’s Guide (Packt Publishing), JSF 2.0 Cookbook (Packt), JSF 2.0
Cookbook: LITE (Packt), Mastering JavaServer Faces 2.2 (Packt).
xix
Acknowledgments
Currently, Anghel is developing web applications using the latest Java technologies
on the market (EJB 3.0, CDI, Spring, JSF, Struts, Hibernate, and so on). For the past two
years, he’s focused on developing rich Internet applications for geographic information
systems.
Special thanks to the reviewers of this edition, Manual Jordan Elera and Mathew
Moodie, who provided input to refine and enhance this book.
xx
Preface
Developing web applications with Java and JavaServer Faces (JSF) had been a great
pleasure (and success) to me for a couple of years when I realized first wanted to write a
book about JSF in late 2010. I got in touch with some German publishers with the goal of
writing around 200–250 pages about this subject, nothing more. “No thanks, too special”
was one answer. The other: “Great. Add some more pages, another thousand, and write
about the whole Java Enterprise Edition. Keep JSF smaller than 200 pages.” Frustrating
answers.
So, I started to blog about JSF in early 2011. And I became a member of the JSF 2.2
(JSR 344) Expert Group. Unlike most of the other volunteers, I wasn’t a JSF implementer,
but an expert JSF user. I became a member of the JSF 2.3 (JSR 372) Expert Group too. I’m
still an expert JSF user, but I started to code a bit within the JSF sources. If I’m accepted
as an expert group member for JSF’s next version, whatever it may be called after the
transition to the Eclipse Foundation, I want to contribute code.
My tutorial on web development with JSF is still the most popular part of my blog
(blog.mueller-bruehl.de), and I never gave up my intention to write a book about this
subject. Over time, I switched from blogging in German to writing about development
in mostly English. And that German publisher would be happy to learn that I now write
about related Java EE stuff also.
With the articles of my blog as a solid foundation, I started to write my book, Web
Development with Java and JSF, which I first published myself in 2014 using Leanpub
(www.leanpub.com/jsf). It became a kind of living book. The first version only covered
the fundamentals. Every reader who purchased it was able to download later updates.
Thus, the book grew up.
In 2016 Apress first asked me to publish the book as is. I declined, because I wanted
to add more stuff. When they asked me again in 2017, the book had reached such a stage
that I agreed. Of course, there is still more to write about, but for every book you need to
make a final decision on content.
Today, you hold in your hands an enhanced edition of my former book. It follows
the same approach, combining theoretical background with practical development.
The title Practical JSF in Java EE 8 is a clue that it’s not only about JSF — you can’t use
xxi
Preface
this UI technology in isolation. Rather, it’s embedded in a full stack of technologies we
know as the Java Enterprise Edition (Java EE). Java EE 8 was released on September 21,
2017, and Oracle has begun its donation of Java EE to the Eclipse Foundation. Even if
future versions will be called Jakarta EE, the latest version still is Java EE 8 with JSF 2.3.
Because this book is about practical development, it concentrates on applications, not
on the latest features. Although all applications in this book operate with Java EE 8,
most of the apps might be realized with Java EE 7, which is still state-of-the-art in most
enterprise environments. Only those functions that rely on newer Java EE features need
the appropriate version — the last application described in this book, Alumni, takes
advantage of such new features.
In a sense, this book teaches you to develop Java EE applications with JSF as user
interface. It’s a book for Java enthusiasts. Knowledge about web technologies is helpful,
but not required. For developers who aren’t familiar with HTML, CSS, and other stuff,
I’ve added some introductory chapters in the appendixes.
Enjoy!
—Michael Müller
xxii
PART I
TinyCalculator
CHAPTER 1
TinyCalculator
TinyCalculator is the first and simplest application discussed in this book. It’s nothing
more than a simple calculator for basic arithmetic. But it is useful to show some
fundamental concepts of web applications with Java and JSF.
As a kind of appetizer, and unlike how I’ll handle the other applications, I’ll first show
you the whole application, with a little explanation afterwards. Then, as a kind of restart,
I talk about the foundations of web applications and explain TinyCalculator and different
approaches.
You can access the source code for TinyCalculator by clicking the Download Source
Code button at www.apress.com/9781484230299. You can also find the source code at
http://webdevelopment-java.info.
C
reating the Application
A web application with Java and JSF uses an application server to run. Don’t be afraid—
your IDE usually deals with that. Later on, I’ll discuss that in more detail. We’ll start with
the application.
For this book, I had to decide which IDE to use in the tutorial parts. NetBeans,
either the Java EE or All edition, comes with GlassFish. At the time of writing, the direct
link to the download page is https://netbeans.org/downloads/index.html. Because
NetBeans has been donated to Apache, this location may change. If that link isn’t
available anymore, refer to https://apache.netbeans.org. Just install it, and no further
configuration is needed to start with simple applications. It’s quite easy.
Many of this book’s basic examples are based on NetBeans 8 (English), which is
bundled with GlassFish 4. GlassFish 4 is the reference implementation of Java EE 7,
which is fine for TinyCalculator. To enable the brand new Java EE 8 features, you need
GlassFish 5 or any other Java EE 8–compliant server, once available. GlassFish 5 will be
3
© Michael Müller 2018
M. Müller, Practical JSF in Java EE 8, https://doi.org/10.1007/978-1-4842-3030-5_1
Chapter 1 TinyCalculator
bundled with NetBeans 9. Since the first donation (IDE) is still in progress, and Java EE is
part of the second Java EE 8 donation, this may be a lengthy process. I’ll describe how to
update to Java EE 8 just after TinyCalculator’s explanation.
All applications in this book are built with Apache Maven (http://maven.apache.org),
which is bundled with NetBeans. The Maven application structure is almost independent
from the IDE. Thus, you may use any IDE of your choice (see also Chapter 2). Depending
on your IDE, you may open Maven projects directly (for example, with NetBeans) or you
may need to perform a simple import (for example, with Eclipse).
As a novice to JSF or Java EE, you may not have created any Java-based web
application before. So, I’ll start this one from scratch in the form of a step-by-step
tutorial. Unlike in future chapters, I’ll cover the whole application here without detailed
explanation, and then we’ll catch up after the tutorial:
1. Launch NetBeans.
2. From the File menu, choose New Project. NetBeans displays the
New Project wizard, as shown in Figure 1-1.
Figure 1-1. New Project wizard
4
Chapter 1 TinyCalculator
3. Click the category Maven, click Web Application, and then click
Next. NetBeans displays the New Web Application wizard, as
shown in Figure 1-2.
Figure 1-2. New Web Application wizard
4. For the Project Name, enter TinyCalculator. You may adapt
the other fields as desired, or just keep them unchanged. It’s
good practice to set the Group Id to the reverse notation of
your domain. Click Next, keep the settings in the next dialog
unchanged, and click Finish.
5
Chapter 1 TinyCalculator
NetBeans creates a skeleton of a new web application for you and
displays it within the projects tree, as shown in Figure 1-3.
Figure 1-3. Projects tree
6
Chapter 1 TinyCalculator
5. Right-click (secondary click) TinyCalculator in the projects
tree and choose Properties from the context menu. The Project
Properties screen appears, as shown in Figure 1-4.
Figure 1-4. Framework configuration
6. Choose the Frameworks category. Choose JavaServer Faces and
click the Add button. Click the Configuration tab and change the
contents of the JSF Servlet URL Pattern box to *.xhtml. Click OK.
While adding JSF to your project, NetBeans creates a web page
called index.xhtml within the web pages, keeping the formerly
created index.html file.
7. On the projects tree open the Web Pages node (if it’s not already
open), as shown in Figure 1-5. Select index.html and delete it.
7
Chapter 1 TinyCalculator
Figure 1-5. Projects tree
From the File menu, choose New File—or press the shortcut key
shown in the menu, which is faster than clicking. The IDE opens
the New File wizard, as shown in Figure 1-6.
Figure 1-6. New File wizard
8
Chapter 1 TinyCalculator
8. Choose the category JavaServer Faces and then choose JSF
Managed Bean. Click Next.
The New JSF Managed Bean window appears, as shown in Figure 1-7.
Figure 1-7. New JSF Managed Bean
9. Enter TinyCalculator as the Class Name and from Scope select
request. Click Finish.
NetBeans creates and opens a Java class file named
TinyCalculator.
10. Now, edit this class. Key in or paste the code shown in Listing 1-1.
Listing 1-1. Editing the TinyCalculator Class File
1 package de.muellerbruehl.tinycalculator;
2
3 import javax.inject.Named;
9
Chapter 1 TinyCalculator
4 import javax.enterprise.context.RequestScoped;
5
6 /**
7 *
8 * @author mmueller
9 */
10 @Named
11 @RequestScoped
12 public class TinyCalculator {
13
14 public TinyCalculator() {
15 }
16
17 private double _param1;
18 private double _param2;
19 private double _result;
20
21 public double getParam1() {
22 return _param1;
23 }
24
25 public void setParam1(double param1) {
26 _param1 = param1;
27 }
28
29 public double getParam2() {
30 return _param2;
31 }
32
33 public void setParam2(double param2) {
34 _param2 = param2;
35 }
36
37 public double getResult() {
38 return _result;
39 }
10
Chapter 1 TinyCalculator
40
41 public void setResult(double result) {
42 _result = result;
43 }
44
45 public String add(){
46 _result = _param1 + _param2;
47 return "";
48 }
49
50 public String subtract(){
51 _result = _param1 - _param2;
52 return "";
53 }
54
55 public String multiply(){
56 _result = _param1 * _param2;
57 return "";
58 }
59
60 public String divide(){
61 _result = _param1 / _param2;
62 return "";
63 }
64 }
You may notice the underscores indicating the fields. This usage
differs slightly from the Java naming conventions. If you’re
interested in why I’m doing it this way, see Appendix D.
11. Open the index.xhtml page in the editor and change it to the following:
1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE html>
3 <html xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://xmlns.jcp.org/jsf/html">
5 <h:head>
11
Exploring the Variety of Random
Documents with Different Content
450 2)0 trat, ifire ©d^ulter rü^renb, |)elb ?)orIiff öor fie
l^ln: „&tauh mir, id^ räd^e kffer aB id^ l^üte, Königin! Sä)
fdE|tDör'0 bei bcr golbnen ^rone, bie ^önig grobiS toar, S)u fottft
öor SReumonb toieber f)dbm bein ^inber^iaar. Sd^ füf)rc fie au§
S)änmar!: ober laffe mein Seben bort: gd^ fd)tDör'§ bei grobiö
^rone: — §el, t)öre bu mein SSort." 2)a bog ber junge grib'gern
\)a^ ^ie auf ben toei^en ©anb, geud^t loarb fein blauet Stuge, t>a
er fügte il^re ^anb: „gd^ fd^ttJör'g beim ^au^Jt ©unilbenS, bie
att' mein fieben toar, S)u follft öor SReumonb mieber fofen bein
^inber|)aar. gd^ fütire fie au§ S)änmar! ober laffe mein Seben bort
— Sd^ f d^toör'g beim §aupt ßJunilbenS : — Sreia, bu l^örft mein
SSort!" Sute^t mit groger ^reue trat ber ^önig öor fie l^in, 3og an
fein ^erj mit ©d^meigen feine traurige Königin: »fS^ f(^mör'§ bei
unfrer Siebe, ber grogeS Seib gefd^el^n: S)u f ollft nod^ öor bem
9Zeumonb unfre ^nber mieberfe^n. Sd^ fül^re fie au§ 3)änmarf :
ober laffe mein Seben bort, gd^ fc^tüör'S bei unfrem ^erbc: —
Dbi|in, bu l^örft mein SBort." 5)a ftiegen bie 2(malungen ju fRo^
unb fprengten bal^in: — §luf bem gelfeu blieb am ©tranbc l^arrenb
bie Königin,* 10. 2)ur(^ äffe ÖJotengaue ging nun ber §eeregpfeil:
3)en trugen rafd^e ^oten Don $of ju ^of in Q\\: „„eaai
451 ^en ©fd^en^feil, Btuttrtcfenb, an ber (Spt|c fc^tüarj
gcBronnt, S)eS SSoI!§frieg0 ^^eifgc Sofung in att' ©ermanentanb.
S)er ^ön'gin ©d^arlac^montel, ben ©ben unb ^nut serfefet, 5ltö
rote fßad^efal^ne flog burd^ bic TlaxUn je^t, Unb mit il^r flog bie
Äunbe öon ber ^ömg^ünbc ßeib, SSon ber SJlutter l^eü'ger 2:rauer,
öon ber 5lmalungen @ib. Unb tt)o]^in ber $feU gelangte mit bem
SJJantet im 93otenIauf, S)a ful^ren §u ben SBaffen bie treuen
©oten auf: ©er S^^^^ lißfe ben Sedier, ber ^ofenbc ben än% S)er
S)refd&er lieg bie S)rifd^el, ber fjifcfier ba§ ^t^ im gtug, @§ liefe
ber $irt bie ©erbe, ber SSanbrer ben 2öeg jumal, S)er Schläfer tiefe
ben ©c^Iummer unb griff jum 9ia(3^eftat)I: 2)ie grauen fetter
brüdten, öon ber 2Jlutter@c£|mer§ entbrannt, S)em hatten unb ben
@ö§nen bie ©d^njerter in bie $anb Unb manche ©otenl^ütte, im
©id^toalb tief öerftedt, 5öarb au§ bem grünen ^rieben ^nm tüilben
^am^f gettieiit: 2)en ©:|3eer fd^mang mand^er Süngting, ber ben
SBoIf nur traf bi§^er: Unb an bie 2)änen bod^t' er: unb fein ©erj
frol^Iocfte fe^rl 11. ©0 fd^arten pd^ biel fjunbert SD^änner im
^önig^fd^tofe, SSon ©drüben fd^ott'iS im ©ofe, öon (Sd^aften
unb ©efd^ofe, Unb ungebutbig fd^arrte mand^' ftoI§en $engfte3
§uf, Unb laut jum Stufbrud^ mahnte be§ $eer§orn§ l^eller 9iuf. Unb
ai§ nun öott befunben fein S3Ucf bie ©eeregja^t, S)a fd^ritt ber
(SJotenlönig in feinen SBaffenfaal, ^di)m Don bem Breiten Pfeiler
l^erab fein ©icge§fd^tt)ert, ©airuS, il^m mef)r aU alle feine
meiten Sanbe mert: ©ein ^nauf trug eine ^one: unb auf ber klinge
ttjar ©eri^t mit ßauberruncn in ©ilber ttjeife ein 5lar. 29* ikruj^.:
452 3m Dftcn lüar'g gcjc^miebct, öon iüeifer S^^^^^
^ant, W,^ nod^ bie 5l^ncn tt)o()nten im fonnlgen ^atmenlanb. %U
fie gen S33eftcn jogen auf fämpfeöotter ^a^n, 5)a fc^tüattg'S, bie
SSegc brec^enb, 5lmal, fein l^o^er 5l^n: Unb atte (Sotenfbn'ge bis
auf ^ermanarid^ Sn ^unbert ©iegegfc^tad^ten beg ©c^tuerteS
freuten fic^ Unb e§ ging bie ftot^e (Sage burcf) alle§ ÖJotenlanb:
„§airu§ ift immer fieg^aft in ^Imatungen^anb," S)rum, atö er öor
fein §eer trat in fönigtid^em ®ang, Unb an^ ber ©d^eibe Bli^enb
ben (Stallt in bie @onne fc^mang, 3)a jaud^jten taut bie SJ^änner,
aU fei gemonnen bie ©c^Iadjt, Unb an bie ©d^ilbe bie Sanken
frfilugen fie mit Wa6)t — Unb ber ^önig ftieg ju Schiffe, bie ©ruber
iinU unb red^tS, SSiet ^unbert @|)eere folgten, ^eife burftig beS
ÖJefed^tS. — S)od^ über ben ÖJotenmimpeln ÖJemöI! lag fd^mer
unb grau, — 2Ö0 bie S)äneninfeln tagen, ha tackte ber $immet btau.
■ ^' t 12. 9lun burd^ bie SO^eereättJogen fu^r ^5nig $ermanric^:
SBeit tieg fein rafd^er ^rac^e bie anbern hinter fid^. @§ trieb mit
meinem ^ehd ber bteid^e SUionb fein @^ie(, S)ie SBelle fc^tug
gebrochen, eintönig, an hm ^iet. 2)er ^önig fa§ am (Steuer: bie
Krieger fd^tiefen aH', ßeiS l^at fie eingenjieget ber teifc
SBogenfc^ttJoU. Unb ber ^önig fetber, fd^täft er? mad^t er? er
meig eS laum: — i @ö tarn i^m über bie 3lugen, fc^hjer, mie ein
banger 2;raum. (Sr fafe, bie müben §änbe auf §airu§' §eft gete^nt:
D hjie nad^ feinen Äinbern fein §erj fic^ mäd^tig fel^nt. St)m
mar'ö, er fafe am @tranbc, bie ^inber um i^n §er: — 25a fa^ er
g^obiS Seid^e: fie trieb im Karen SKeer: — ^^
453 ' 3)ie glut trug fie §ur Äüftc: fein Sluge totetifalt, ' Sl^m
folgt ein blut'gcr (Streife, fein §aax im SBaffer ttjattt. 2)em ^önig
toaxh fef)r Bonge: er fc^eute ben toten SKonn: Unb nöl^er, immer
nä^er fd^ob il^n bie %tnt l^cran Unb fein gcBrod^neg 5luge fal^
auf ha§ ^inber^aar: @r regte fid^, er ftredte nun au§ bie 5lrme
gar: 3)er ^önig »ollte fliel^en, fein gu6 öerfagte ben ßJang: — S)er
$:ote bie beiben 5lrme um bie beiben ^nber fd^tang — Unb aU er
fie umfd^tungen, trug er fie mit inS Tlztx, — $;rieb femer, immer
ferner, — bie finber Hagten fe^r. — Unb tiefer, immer tiefer §u
©runbe bie Seid^e fin!t, 9^ur fem, h)ie Maffer SD^onbftral^I,
Öiunitben§ ©olb^oar Min!t: — 3)a fprang cm^or ber Äönig — tiom
S3orb bog er fid^ jä^, „§alt, ^inber!" rief er unb l^afc^te mit ben
STrmen iit bie (See — ®o an^ ber Scheibe !tirrenb in bie SBellen
^airuö glitt: 2ßie rafd^ bie tiefen SBaffer bag fd^merc @d^mert
burd^fd^nitt! 2)er S^önig ftanb unb ftarrte — bie SBeHen loogten
fd^toanf, — Sie wogten unb fie raufd^ten — unb bog
©iege^fc^toert üerfan!. — . @r fo^ ouf bie leere Scheibe, — er fo^
in§ tiefe SJieer, @r fc^IoS öor ©rom bie Slugen, — bo Ujorb boS
§erä i^m fd^merl •_■ ;. Vkv^iiM.iiVi-.^.,^- C
454 Braeiter d^cfang. 1. 5)a5 $ecr ber @oten lagert an ber
^üflc bon ©anelanb, @5 finb bie fd^ncllcn S)racl^en gegogen auf
ben (Sonb: Unb um bie SD^auem Qtt^xa^, burd^ ©jölunbs
©tranbgefitb, ^eff funfein §etm unb ^arnifd^, laut Üirren ©d^mert
unb ©d^ilb. ! S)a t^ut ft(| auf ha^ 95urgtt)or: unb fiel^, auf
weigern 9?o§ ^a^ $itbrab§, 93albur§ ^rieftet: x^m folgt !ein
teiftger Zxoi: ! S)ie beiben ^önigSfö^nc finb alle fein ÖJeleit, |
455 „3n bbfem ^tteg? «ei Db^in! mad)i bic§ ha§ mttx
Minb? Sft'S ungered^t, ein SSater l^eifd^t fein geraubte^ tinb?
2)ag \\>xaä) nid^t öatburtoeiS^eit: ba§ f|)rod^ ein banifd^
„Setrogner ®oten!önig! Si^rfat fc^uf bir bein ©d^merj! ©iel^ft bu
am §immel fielen ben flaren Slbenbftern, SSon euern
9Jlenfc^enforgen unb ©rbenwünfc^en fern? Bo i)o^ ftel^t
93atbur§ ^riefter 06 a)?enfd§en(ieB unb §a§ : — 2)a§ enj'ge lRtd)i
ber ÖJötter fein Seben, fein SSerlag. Unb ob fein 93ilbni3 Set^raS,
ob @ottonb§ ©c^otte trägt: — 2Bo Stecht njofint, ha ttjo^nt
93albur, ber in ^eit*ger SBoge toögt. e§ gelten 5)ön' unb ÖJote bem
(Sott beg iRed^teS gleid^. — ©efaat liegt ^önig ^obi öon blut'gem
SJlörberftreit^ : 3c§ §og au§ feinem ^erjen biefen
5lmalungen^)feil: Unb ic| öerüinbe: Unfieg^ Unl^eil ift euer $:eÜ,
93ig bie 2:]^at, bie biefe tod^t ©d^Winge beflecft mit Sflot,
(äJelöfd^t unb ausgetilgt l^at be§ SJlörberS ©ü^nctob. @g
fc^elten ©ötter unb SKenfd^en um biefen fc^nöben SJiorb 9^ur
©inen SKann ouf @rben — : beinen 93ruber ^ortiff bort: ©er ^ann
mit \yen bleichen ©d^Iäfen, mit hm tief gcfurd^ten Srou'n, S)er wie
ein fd^njarger %eU\tdn beS Unheils anjufd^au'n, ^VLX er, ber
Unl^olb, mod^te würgen ben ftillen ÖJrci§, S)er feine S3Iumc
fnidte, be§ S^orbtanbä ÖJIüdE unb ^rei§; Unb alfo rebet S3albur
auö feinet ^riefterS SKunb: „©tofet i^n, i^r 5(ma(ungen, au§ eurer
©ippc S3unb, @onft wirb ber Sorn ber ©ötter erbrücEen euer §auS!
Sflid^t fö^nt mit feiner 9ieine fic ber reine grib'gem au^, ^\6)i
§ermonrid^, ber @cred^te, mit feiner (55ered^tig!eit : SSie @ineS
(SliebeS Siul^mt^at htn ©efippen ©l^re (eit)t, l-^Ät-^ftk^ !^, ii'', -
jniaf
456 JBerbirbt ein ÖJIieb bie @ip|)e na6) (Sötter* unb
2Känner* iRcc^t: : @in Pfeiler beiner ^otte, morfc^ unb
ttürmerfc^Ieci^t, S3rid^t nid^t allein gufammen: er reifet mit fic§
bein $au8. S)rum liefre beinen 93ruber ben (Söhnen grobiS ouS,
ÖJieb i^n in il^re ^änbe: (afe i^m fein S^iec^t gefd^el^n, S5u
n)irft, fo lang er atmet, beine ^inber nic^t me^r fel^n!" @r
f|)rac§'§, ben 5lrm erijoben: im S^^te marb e§ ftiH, SBic toonn ber
2)onner rollte unb n^ieber roHen Witt. 3)er Äönig na^m au§
^ilbrabl^S $önben ben Btutigen $feit: „iUiein ©ruber, fage, ^aft bu
an biefem SBIutc teil? 2)u l^örft, n)e§ fie bici^ f ekelten: nun öffne
beinen SJiunb, (Bpxxd), fo hü liebft bie Götter, t^u' un§ bie
SBa^rl^eit funb." 2)a brad^ in ^orUp §erjen ein milbeg ©raufen
Io§, SBie wenn ber S'iorbfturm aufmü^tt be^ SD^leereS tiefftcn
@ci^o§: Unb er bad;t' in feinem ©inne: „5)ie Götter lieb' id) nid^t:
gcf) tiebe nur bie S)änmar!§'^rone gotbigtid^t! 2Bie id) fie att'
öerad^te, bie§ götterbange QJefd^Ied^t: SWein SÖSitte ift mein
ÖJIaube, meine ©tär!e ift mein Siedet." Unb au§ be§ Königs
^änben nal^m er ben @fd^en^)feit, 3erbrad^ i^n, öor bie güfee
marf er ^nut unb ©öen ein Ztil: „Sl^r jei^et mic^ be§ 9Jiorbe§,
montan: bemeift i^n oud^ 3m ^am^3f auf Zoh unb Seben nad^
ed^tem 9^orbIanb§* braud^. ßommt an, \\)x ^önigSfnaben, um
bie ©tirne ben gotbnen ^ranj: 5luf einmal atte beibe labt ?)orliff
eud^ jum $:onj. Wlit tnä) bin id^ ju @nbe. — S^lun l^öre, mein
©ruber, mid^ : i @§ i)at biefelbe 9Jlutter geboren mid^ unb bid^.
457 ^i6)t Itcfre meinen gcinben mid^ lue^rlog in bic §anb.
^VLx beinctttjegen fam id^ in biefeg ©änenlanb, S)ie ^nber bir ju
retten: fonft tüär' id^ nimmer l^ier, Unb l^eifd^en biefe S)änen
il^re§ ^önig§ SÖIut öon mir, — SBol^tan, fie mögen mid^ fud^en
in meiner 93urg SSuIf^ag, S)a motten mir rafd^ erproben, maS
^afe unb ^aft üermag. " „S^icin" — rief ber alte ^ilbrobl^ — „nun
unb nimmer* mef)r! Unb mör' e§ 3fled^t ber SJ^enfd^eu: — ben
ÖJöttern ift'§ S3e{d^mer. Seit ^orliff traf ber SJiönner 93eften mit
böfem $feil, 3ft er ben Göttern eigen: fein §aupt marb S3albur§ ^eil:
S)arum, i^r ^önigSföl^ne, ben S^ci'fömpf meigert il^r: S)enn biefer
SJJann ift S5atbur§ erforner D^jferftier: Unb95atbur mu^ i^n f
dalagen, bem öerfatten iftbie§$au^)t: S)em ÖJott barf nid^t fein
D:pfer öon 3Jienfd§en fein geraubt. i5robi mar ^önig^priefter in
93albur§ ^eitigium: Unb am Elitäre 93albttr§ fättt ^orftff, i^m jum
Sfhi^m. 9lun ba mit fred^em gnß er betrat \)a§ ^eil'ge Sanb, S35o
mir fjrobi^ §ügel türmten im ^eimifd^en 35ünenfanb, 2Bo ouf
Set^iral l^el^ren Rinnen ber SBalburtempet ^Jrangt, S)eg @otte§,
ber ber 9Jiorbfd^uIb mit btut'ger
458 2)ag ^at öor mir ertragen !ein anbcrer ?lmotung. 5)tc
$onb bot id) jum f^rteben, öerga^ ber S3elcibigung: S^x fto^t fie
fort mit §o(^mut, begel^rt bie Unikat gar, ^a^ id^ ben eignen
93ruber jum (Sd^Iad^ten Biete bor, Unb weil fein §anpt id^ njeigre,
brol^n bie Knaben bort, @ie brol^n bem ®otcn!önig mit
übermütigem SBort? $a, il^r 9iäuber, nun geben!' iä), mie i^r
überfielt mein Sd^Ioi 2öie i^r meine befolgen fd^tuget, hai ha§
93Iut om ©ftrid^ floi 9Sie if)r meinem SBeib gerfe^tet i^r !5nigtid^
ÖJeftjanb, SBie il^r meine ^inber fc^teiftet gebnnben burc^ SKecr
unb ßanb, SBie if)r meine ^rad^en bofirtet, tt)ie it|r fd^nobe mid^
öerlad^t, 5l(§ id^ fd^mamm nad^ euerm ©d^iffe, öoll 3orn unb
ol^nc Smad^t, 2Bie auf ober f5etfen!Iippe l^arrt fd^merjenooll
mein SBeib, ÖJepeitfdjt Don fd^arfem S(J?eern)inb ben föniglid^en
Seib, S!ßic in eurem Werfer fd^madEitet mein ]^oIbe§ ^nber^jaor,
— Unb nun ttjogt i^r nod^ 5)rof)n)ort? S^^^^^ ^cr ©d^mad^,
fürmal^r! i ^inmeg in euer iRaubneft, mir folgen eud^ auf bem
gu^, Unb fd^mettern auf eure §elme ber 5(malungen (55ru6!'' S5ie
2)änenfürften gingen, unb l^oben ^ilbrab!^ ju ffio% 2)er rief, —
fein meiner SJJantel im SSinbe flatternb flo^: — „S3et!)örter
©otenfönig, ber fid^ gegen bie ©ötter !el^rt, i)ein ©|)eer 'i)at feine
©pi^e, !eine ©d^neibe l^at beiu ©c^mert." I 2. 3)ie 3in!cn
fd^mettern jornig burc^g Sager ab unb auf, 3)ic Dtiren redEt bag
©d^Iad^troft unb mietiert freubig ouf: - K^'.r^^j
459 ®cn Sct^ra« ftaric SWoucm l^tn Braufl baS
©otcn^ccr — S)a tuarb i^m SBtnb unb ©onnc ju groger
^ant^fbcfd^tücr: ©rell blenbenb in btc 5(ugcn fd^icn fd^arf baS
(Sonncnüd^t Unb öon ber @tabt l^cr foufcnb, in @taube§tt)ir6cln
bic^t, ^am ^eulenb, grimm, bic SBinbSbrout, bcn ©türmcnbcn jur
$ein: ©ie judtcn mit ben SQBimpcrn unb fallen blinjenb brein. —
S)od^ oben ouf ber Sinne, ben ©olbftab in ber §anb, S)en
©ic^fronj um bie ©d^Iäfc, ber S3albur))riefter ftanb: @§
fc^immerte fein SJiantel im Sid^te tounberbar: [ SBie eine jtoeite
(Sonne fd^ien er ber ©otenfd^ar: • Unb il^m ju 5ü§en !nieten bie
fjürften ^ut unb (Söen. @r l^ob juerft bie 5lrme gen ^immel auf mit
^U^n, S)ann legt' er auf i!§re §elme bie §änbe tin!§ unbred^t^:
5tuf fprangen fie mit Dürren, begierig be3 ©cfet^tg: ©ie fül^rten !
ü§n bie S)änen in§ ©tranbgeftib .§erau§, SSerfd^mäl^enb ftolj bie
©d^irmung im ^o^en Selfenl^auS. 2)0 f|)rengte tt)eit ben ©einen
üoran §ermanartd^: „S)u ^nberrauber ^anut, l^ierl^er, id^ fud^e
bid^!" Entgegen brang i^m ^anut, ju %n%, üorm ^aupt ben
©d^ilb: S)ie beiben §eere ftanben, ertoartenb, im ^efilb: ^oä)
fd^ttjang ha^ ©d^wert ber ^önig, e3 ioud^jtc ha^ ©oten^eer:
fifflnrif §airu3, ©d^toert bc3 ©iegeg, triff fidler nun unb fd^ttier."
S)od^ $airu§, ber lag roftenb im SJleere^grunb im $:ang — Unb
fiirrenb ba§ ©d^toert bc3 Äönigg an ÄonutS ©c^ilb jerfprang. S)a
flog ein ©d^rei beS ©d^recfen^ burc^ alle ^otenrei^'n: „^aS
©iege§fc§n)ert jerfprungen! n)ir muffen öertoren fein!" Unb jubelnb
ftürmten bie ®änen auf bie (Sntfe|ten an: Slog iJrib'gem nid^t ju
§ilfe, ber ^önig nid^t entrann:
460 5Dfnn faufenb fd^on bic Streitaxt her grimme lanut
fc^toang, ^U mit bcm ©d^itb bel^cnbc grib'gcm bojtoifc^cnfprang.
— S)ic ^otcrt, lid^tgebtcnbet, gc^jcitfd^t öon ©taub unb SBinb,
Sßon böfcr 5lngft beHommcn, fod^ten tote la^m unb blinb. Sic
fielen öor ben S)cinen, toit öor ber «Sichel ®ra8. ©er geinbe
©d^njcrt njte Seuer unter i^nen fraß: @in jeber Stein, gefc^Ieubert
üon 93otbur*Set^ra§ Sßall IBon grau'n, öon ^inberl^änben »arb
etne§ @oten %aVi: ©in jeber ©tretd^ ber S)änen brang fd^arf
burd^ $elm unb @^ilb, 91I§ fei'n fie nid^t öon (Sifen, aU fei'n fie
blumenmilb: 3)oc§ oon ber ^änen ^anjer fprang 06 ber ©otenfpeer,
31(8 l^ietten bic SBatfiiren bie ©d^ilbe Oor i^nen §er. 2)0 njanbten
fid^ bie ©oten, entfc^art, in tt)ilber fjluc^t, Unb l^ieften erft im
Säger an be§ 9Keere§ fanb'ger 93ud^t. Umfonft, ha^ Sribigern
mafinte, ber ^önig rief unb ftonb, 2)a6 Sorliff feine Slüd^t'gen
erfd^Iug mit eigner $anb, — @ie fiietten nic^t: fie flogen: unb riffen
mit fid^ fort Sm ©d^toatt bie Surften felber 6i§ an ber 3)rad^en
SBorb. — Unb nieber ging bie (Sonne unb grüßte mit Ie|tem (Straft
®ie fiegenben ^änen()elme, gef^iegelt in i^rem Stal^I. ®ie
manbten fid^ frol^tocfenb unb jogen na(^ $ou8 mit (Sd^aa, Unb
fro^ empfing fie $ilbrab(| auf ßetl^raä ^eiCgem SBaU. 3. Unb al§
bie SRod^t gelommen mit SWonb unb ©ternenftral^t, (Sing
fjribigem, ber junge, ^inaug jur blut'gen SBol, S)ie Seid^en
aufjutefen, bie ba tagen oon bem @tranb, 2ßic fie ber $:ob ereilte,
bi§ an Setl^rog gelfenranb. — c^-U
461 Unb gorliff faß om @tranbe, fal^ fc^locigcnb in bic
3Iut: Sein @inn toar ungeBrod^cn unb ungebeugt fein 9Kut: „Oh
nod^ öiel $:oufenb finfen öon Winden in ben $:ob, — öeöor bic ßilic
tottt x% bcöor bie ©rbbeer' rot, 3:rog' id^ bie 55änen!rone auf ben
Sii^^n öon Setl^ra bort: @o ^at bcr 9?ecl gen)ei§fogt: unb nie
noc^ trog fein SSort. Unb eg tieifd^t mein §erj mit ©d^reien bie
^one öon S)cinemar!: ©ebulb: erfüllt mufe merben, toa§ ein SDlann
begehrt fo ftar!." 3)0 rül^rte feine ©d^ulter eine teife $anb:
§erntanarid^, ber ^önig, öor feinem ©ruber ftonb : $cll traf fein
tW^ Slntlit ha^ öotte ^monbentid^t, @§ lag ein btaffer Kummer auf
feinem 5lngefid^t: . @r §atte bie (5Joten!rone getöft an^ feinem
§aar, @r toax be§ ^önig§mantet§ unb alle§ @d^mudfe§ bar:
„gorttff, n)ir finb gefd^Iagen, bie 5lmalungen befiegt! O n)ic bal
2öort gteid^ 93ergen auf meiner ©eele wiegt. S)od^ nid^t öom
@d^n)ert ber ^önen: nein, üon ber ÖJötter $anb: S^r 3orn ift unb
i^r Unzeit auf unfer §au§ geftjanbt. ßiner öon unS S3rübern §at
oerbrod^en fd^mere ©d^ulb : 2öir motten morgen opfern unb
prüfen ber ÖJötter §ulb : 5luf weffen Opfer gnäbig bic l^o^en
ÖJötter fel^n, S)er fott auf§ neu jum Kampfe mit biefen ®önen
gel^u. S)od^ ttjen bie Götter öerftogen öor i^rem 5lngefic^t, @ott
unferm §au§ jum Unl^eil länger atmen nid^t: @r fott fid^ Söalbur
opfern mit feiner eignen ^anb, 35a6 njtcber ben 5lmalungen fei
Segen jugemanbt: Unb ha^ fottft bu mir fd^njören bei biefem
l^eiCgen 9Jieer: — ^rum !am id^ in näd^t'ger ©tunbe ju beinem
@d^iffe ^er."
462 I S)od^ ^orltff fd^hjetgt: feft brüdt er on bei^
©d^tücrteiS ©riff bie gouft, 3nbe§ ii)m toiebcr im ^erjen bie
93ranbung loütenb brauft: „S^id^t etier toerb' id^ fterben, bi§ bo§
id^ ^önig bin, SBiS bafe ber S)rang erfüllt ift, erfüUt be§ @prud^e§
©inn: @rft muß id^ ^one trogen ouf £ett)ra§ l^oiiem SBatI: — @o
ift morgen nod^ nid^t fommen ber Zaq öon gortiffs S)ie ©Otter?
SBcr l^at fie geje^en? S33er toax fd^on in Söal^aH? SSer totx% ob
ber $)onner mel^r ift alö eitel SBoKenfd^aH? 2)^ein SSiUe ift mein
ßJtaube, mein '3it6)t meine @tär!e mir, 3c^ ttjei^ nid^t öon ben
ßJöttern: — wer toei§, ob fic öon mir?" Unb taut rief er: „SSol^Ian
benn, e§ fei h)ie bu begel^rft: SSir motten opfern morgen, ha^ ben
©d^utb'gen bu erfä^rft: Unb öermerfen mid^ bie ÖJötter, — bem
93albur opfr' ic^ mid)!" Unb er ne^te mit bem SBaffer beS 3Reer§
bie ©d^läfe fid^ : SSon ÖJrunb auf ging ein SRaufd^en, at§ er in
bie SBogen gnff: S)ie l^eifge SJleerftut^ fpri^te ^od^ jürnenb an
fein ©d^iff. 4. S)a fam ber junge Srib'gcrn öom ©c^tad^tfelb rafd^
jurüd: „S'iun freut eud^, liebe 93rüber, ^ört an, i^ bring' euc^ mM."
! „3ft ^(i^ ®Iüdf ber Seic^enl^aufe , ben bu oom Selb gebrad^t ?
333ie !äme baS Sid^t ber fjreuben in ber Slmatungen 9?a^t?"
..,.J......
463 : ' „SSerjagc ttid^t, mctn Zottig, ^nk S^tc^cn Bringe
icf): ^ic^ grüben bcine ^nber (JJunirb unb ^iaxi^." ,@o l^aft bu ftc
gefeiten, gef^roc^en? alle jtüei?" „SBenn mir bie ©ötter iielfen,
fielet fie ber 9Jlorgen frei! — 2Bir fud^tcn unfrc $:oten cmfig auf ber
SBat, 95i3 an ber Seftc SOlaucrn im bteid^en SJionbenftra^I. ©in
5lmt toar'g öoller ^mmer: benn mand^en teuern 9Jiann Sanb iä)
mit fd^werer SSunbe, borau§ fein ßeben rann, Unb mand^c
9fled^te, bie id^ jüngft brüdEte lebengnjarm, i5anb id^ geballt am
©d^ttjertgriff in fc^merem $:obeg* l^arm. 3)a, als id^ längg bem
SSaHe mit jögernbcm ©d^rttte §ell aus bem grauen ^urme, ber
über ber Mantx §ing, @d^tug eine S3aIbur*2Beife Üagenb an mein
O^x: — ©inft fang id^ fie ÖJunilben bal^eim im SSurg^of öor, —
9f?afd^ fa!^ id^ auf — : ^a, f)inter bem l^o^en genfterranb, SeiS
tt)in!te mir ÖJunitbe: bei i^r ber ^abc ftanb. SKir toar'S, id^ fä^ im
SSinter ^jtö^tid^ jttjei 9iofen btü^n, 3d^ fäl^' an^ bunfetn
SBoIfen jtoei §elle (Sterne gtül^n. „®aS ift/' rief id^, „ein freubig —
ein traurig SBieber* fe^n! dn^ fd^auen unb nid^t retten njiH mir
über bie ©inne gel^n." „^aS ÖJittcrtoerf ift roftig/' rief (eis jung
5llarid^, „§ätt' id^ ein gut @tücf @ifen, id^ bröc^' cS fid^erlid^.
(So fömen Wir, in jmei @))rüngen, juerft auf ben 9)lauerranb, ®ann
tjcrunter t)on ber SJiauer, ^inauS inS freie Sanb,
464 SSJenn unten (Sotenamte in freuen unS näl^men auf."
5)cn S)oI(^ tparf ic^ l^inauf ii^m, er fing il^n rafc^ am Ihiauf.
„9^un tüiH ic^ baS ©itter brechen!" — rief er — : „um
SOlitternad^t ^omm ttjieber, lieber Dt)eim, big bol^in ift'0
üottbrad^t. 2)odö fomm allein unb leife: fd^arf prt be§ 5lrg*
ttjo^nä OI)r." 2)a rief ic^ furjen Slbfd^ieb jum ^urme nod^ empor,
Unb flog jurücf bur^§ ©c^tad^tfelb : mein $erj öer* langte fe^r,
9Jiein ^önig, bir ju bringen bie §off nunggfro^c SJJär : SBenn un^
bie ©ötter l^elfen, — frei fü!)r' iä) bir fie f)er" „SBenn un§ bie
@btter Reifen!" feuf^te ber ^önig fc^mer. SWS SJütternad^t
ge!ommen, fd^ritt gribigern in§ gelb: 9li(i^t ©inen gaijrtgenoffen
gefeilte fic^ ber §elb: (Sr ging mit leifen Schritten burd^ bie btut'ge
SSal einher, ©unilbeng haä)^ er fei)nüd&; feine (Seele tt)ogte fe^r.
@r eilte ju gewinnen ben SD^auerfc^atten fd^nell, | ®enn oben
auf ber Stae n)arb'§ üon gacfeln §ell. (So 30g eine 2)änenrunbe
oorbei mit ©peer unb ©c^ilb: „^alt! faf)t i^r nid^t toa§ fc^Ieid^en
bort unten im ©efilb ? fßlix toax, iä) \a^ einen ©dfiatten, — nun
fel^' id^ i^n nid^t mel)r." „5«ein, beutlic^ jeigt bag S«onbIid^t: '§
ift atteg ftitt unb leer: @g njar bie atte SBeibe bie t)a ttjäd^ft an§
bem SJ^auerftein : S)er SEBinb Warf ifiren ©chatten ini^ gelb im
3J^onbcn* fc^ein."
465 „Sd^ rote," \pxa6) ein 35nttcr, „'S toor ein erfc^tagncr
§ier, an beni ftarfen $:urme, lagen i^rer üiete tot." „SBo^t" — ladete
tout ein anbrer — „bic ©eiftcr bürfen l^erein: SQlügt' man ben
©chatten niedren , fd^timm lüörV e§ SBöd^ter fein." „^ommt, lafet
un§ eine SBeile nod^ l^ier am $:urme ftel^n, Ob njir bie n)ei§e
Slofe, bie ©otentod^ter, fel^n." „ — SBie, @nori, alter ©ranBort, bn
jäfiteft fed^jig Sal^r, ^egft für bie Slmalungin Süng(ing§t^orl^eit
gar?" „9^ein, fji^eunb: bod^ gteid^t i^r 5lntii| meiner ^od^ter
3rmingarb, S)ie üon ber tiefen S^iorbfee im ^ab öerfc^tungen
hjarb. ©e^' id^ bie (Sotentod^ter, fo wirb t)a^ §erj mir toeic^ Unb
e§ fommt mir über bie 5(ugen einem fü§en $:ranme gteid^." Unb
UJciter jog bie 9lnnbe, i^r Schritt »erraffte fern. 9?nn ou§ ber
SlJiauer ©d^atten l^ertjortrat f^nbigern, ©d^Iug breimal in bie
§änbe Iei§ nnb ma'^nte fad^t: „mn, max'vi), ^ier bin xä)\"
„Dl^eim, eS ift üoUbrad^t!" Unb ouf ben Scnfterfimgftein trat er
be^enb nnb flug Unb ouf bie SJlonerjinne fprong er, aU tt)är'§ im
Sing. „&IM auf, mein topfrer Springer," rief gnb'gern tobeSmorm,
„^oä) einmal fo gefprungen, unb bu fpringft in meinen 5Irm."
„SBo^Iouf nun, liebe (Sd^wefter, nun fd^ürje bein ÖJetoonb Unb
fd^tt)inge bid^ unb fpringc nod^ auf ben SJlouerronb." Unb bi§ on§
Änie ÖJunilbe fd^ür§te ftd^ gefd^tt)inb: — . ®od^ i^re langen
Soden flogen frei im SBinb, Unb ot§ fie fic^ ^erabUeg in bonger
©d^eu unb §oft, ging fie on §aar unb (Gürtel ber jätie SBeibenoft, .
»a^n, Cdmtl.pottift^e TOtrle. ffirße Serie 5Bb. VII. 30
466 I ©er toviä)^ au0 bem (Gemäuer: unb qualöoll ttJtcgt'
fie fic§ $0(^ jtüifd^cn @rb unb $immet: „flie^"' — rief fie —
„5ltarici^! Sflafd^ flJriitge öon ber SJiauer unb ftie^ ntit fjnbigem
Unb grübet mir ben SSater unb bic liebe SJlutter fem : — SJJir fönnt
i^r nimmer Reifen, f(iet)t rofd^ unb rettet eud^." „3m SIugenblicE
mag bred^en" — fd^ric f^J^ib'gern — „ba§ ÖJefträud^, ©u ftürjeft
ouf bic getfen unb ^erfc^metterft bein ®c* Bein: IBei allen (Söttern
^t^garb^S: — nein, nein, ha^ foH nid^t fein!" Unb rafd^ nal^m er
fein §ift^om unb ^ob e§ an ben SJJunb, Unb Blies, ha^ laut eS
fd^aHte burd^ Set^raS getfenrunb. „93i§ id^ bid^ fidler fe^e,
njeid^' id^ nid^t öon l^ier! §erBei, fierBei, i^r 5)änen, il^r läffigen
SBärter i^r: ßure befangnen ftiel^en, fie hjagten ftoljen ©^rung,
^erBci, l^erBei, i^r ®änen: tnd) ruft ein toalung." ©a toaxb e§ toilb
leBenbig ouf Si^nc, $:urm unb SBall, SSon gadteln unb öon SSaffen
^tU fd^ien eg überall, ©ie brangen aus ben 5^:1^ orcn auf
f^ribigern im ©türm, ©ic Kommen ouf l^ol^er Seiter ju ©unilben
an ben 2:urm, Unb löften au§ ben SttJeigen i!^r Socfen unb
©eUJonb Unb legten fie Benjugttog l^in ttjo ber ©ruber ftonb. Unb
fie umringten grib'gern mit bro^enbem SBoff enfd^n)att : ©er fo:^
bie Bleiche gungfrou gerettet ouf bem SBall: „SRun tötet mid^, if)r
©änen, — o lebe too^t, ÖJunilb!" @r fprod^'g unb n)arf jur @rbe
fein ©d^njert unb feinen ©c^ilb. I
467 Unb fd^on naä) feinem Raupte ^eBt grimm ftc^
man6)ti ©d^wert, — 2ltö ©öeno, burd^'S Getümmel getcedEt,
bajnjifd^en fö^rt: „$aft ein, mein SSoIf, i)ait inne! 2)a§ ift ein
Slmalung! S)u ttJoUteft ttJOl^I erretten, grib'gern, bie SWftet jung?
iBift felbft inö SRe^ gegangen unb ^ft fie nid^t befreit! SRun fottft
aud^ bu erführen ber S)änen ÖJaftlid^feit. SSittfommen ! S^
ßetl^rag fallen trat nie ein ttjert*rer ©aft, 9lun follft bu nad^ ber
SKeerfal^rt l^ier l^alten lange iRaft!" „2)a§ ^ol^nnjort meibe,
©öeno! @§ ift nid^t eure ^aft, S)ie \)a§ ^au§ ber Slmalungen tor
eud^ banieberrafft: S)ag fd^affen bie öon 5l§garb]^ mit il^rer
ftarfen^anb. 3)od^ §aben fie nid^t für immer öon un§ fid^
abgenjonbt. 3d^ n)ei^: ber ^ag tpirb fommen, ha fid^ n)enbet bad
@efd§idf: — ' IRun f daläge mid^ in Letten, bein ift ber
SlugenblidEl** S)er Äönig aber ^arrte Bang feiner SBiebcrfel^r: @r
fanbte, nad^ i^m ju fud^en, Soten ring^uml^er. Unb aU bie ©teme
blid^en unb eg bämmerte burd^g ÖJefilb, S)afanbten il^m
bieS)änen be§ befangnen ©c^mert unb@d^üb: „$eut S^ad^t in
unferm S^efe fing ein ebler SSogel fid^, SBir fd^idEen feine
©d^ttjingen an Äönig ^ermanrid^, Oh er ben SSoget fennen mag
an ben gebcm nid^t?" Sout üagte ha ber ^önig unb öer^üttte fein
Slngefid^t: „D gribigern mein SBruber, mein Söruber fMbigem! SBon
meinem §immel gefallen ift nun mein ^ellfter @tcrn!^ ao*
46S 7. Unb aU bie rote @onnc fticg au0 bem ^ctrgcn
SÄeer, ®a ]d)xitt ber ÖJotenfönig öor feinem ^oI!e t|er. @r ging
entblößten ^aiipteg in feierlichem ©d^ritt, ' Unb fc^njeigenb,
fta^tgepanjert, ging ber bunüe ^orliff mit. SBo fid^ jnjei grüne
§ügel wölben auf bem ©tranb, Stimmt jeber Don ben gürften mit
feinem D^fer @tanb: Unb ^rrenb in ber Siunbe bie (5Joten ftel)n
gefd^art. S)a fül^rt ben ^engft, htn ttjeißen, glänjenb,
bid^tbeliaart, S5er ^önig an ber SJlä^ne hieran jum Set^altar, S)er
avL^ brei grauen Steinen getürmt am $ügcl »ar. 5luf jebem Slltar
(obert ein Seuer in roter ^rac§t, ^ü^ fieit'gen Sinbenäften mit
gettjei^tem ^arj entfad^t. @r legt bem 9io6 bie Sin!e fanft auf ben
glatten 93ug, 3n ber Siedeten er bie Streitaxt, bie tt)ud^tgen)altige,
trug : „^un l^öret mic§, il|r ©ötter, bie i^r in 5l§garb§ n)ot)nt: Sßor
allen bu, o S3albur, ber bort auf Setlira thront! SBenn irf) euern Soni
berfd^ulbet burd^ unbefannte , S)a6 bon ben 5lmalungen il)r
wanbtet eure §ulb, SBenn id^ ben SJieinen lebe jum glud^ unb
nid^t jum ^eil, . @o fd^lagt mein §aupt, il)r Öiötter, mit euerm
5)onnerfeil, $:refft mid^ ju eurer (Sü^ne mit töblid^em ^efd^ofe,
SBie id^ mit biefem Jammer treffe biefe§ 9io6!" ©prac^'g unb
fd^mang ia^ ©d^lad^tbeil unb fd^lug beS iRoffeS Stirn, 2)a§
ftürjte bumpf jur (Srbe, oon Slut befprijt unb §irn. Unb ^ermanrirf)
l)ielt inne: gen gimmel feft ben ©lief, 5113 erharr' er, tobgewärtig,
htn öli^ unb fein ÖJefc^icf. ^od^ rul^ig blieb ber ^immel: bie
@onne glänjte flar: 2)er @eett)inb fpieltc leife in besJ S^önigö
langem §aar: . ai-a-'J^LL^Ali
469 §cH lobcrte fein ^tnet, gefilmt Dom aRorgen^aud^/
Unb todi unb fäulcngrabe gen ^tmmet fttcg ber 9lauc^. 2)a toanbte
fid^ ber Äönig ju bem $ügel nebenan: „^o^laxif mein SBruber
Sorüff, t^vC nun, niie ic§ get^an!" Unb Sorliff bife bie Si^pe, er
f^rac^ !ein einzig SSort, ©ci^eu badeten feine ÖJebon!en an ^önig
3robi§ 3D^orb: SBie ha^ rote SBIut be§ ©reifes floß in ba§
2Batbgra§ grün: 2)od^ öor fid^ fal^ er 3)önmorfg gotbne ^tone
gtül^n. ©ein 5luge {prüfte geuer, fd^arf furd^f er bie fd^ttjarjen
S3rau'n, @r fd^ritt §eran jum ^ügel, gemattig anjufd^au'n. „gd^
Witt" — fpra^ er — „bcn (3'ötttxn nid^t o|)fern $f erbebtut: 3d^
n)ei6 ein beffer Op\zt, ju fü^nen il^re SBut. gm Kampfe griff id^
geftern biefen S)onen §ier: — §ei, t)tn fd^en!' id^ (SJott SBotbur:
ber ift mein Opfertier." 55o ftieg eine ©onnertoolfe öon weitem auf
im Silieer, Unb e0 fd^auten ftarr bie ©otenauf ben
fd^redttid^englorliff l^er. Unb ber ^5nig rief: „$alt innc! 5)u trcibft
mit ^tn ©Ottern @pott! ®u bringeft 9Jlenfd^eno|)fer Salbur, bem
weißen @ott? ®cr f5teöel fotd^en DpfemS ift lang fd^on
abgetl^an." ^od^ ?)or(iff fd^Ieift ben 2)änen gebunben jum §ügel
l^eran Unb brücft fein §aupt jur (Srbe, !niet auf feinem S^acfen gar,
9JUt ber iRec^ten redtt er grimmig fein ©d^wert gen §im* met bar.
Unb immer nä^er rottten bie fd^toarjen SBoÜen fd^on Unb f
entleer über bie '^Inttn tarn bumpfeS ^onncrbrol^n. „3urüdf, bu
mitbcr ^önig, jurürf, ^ermanarid^: SJluß id^ ben ©öttem opfern, fo
wä^te \>a^ Opfer 3^^^.
470 ©c^t nun, bag ftd^ au(^ Dorliff ouf ^ßricftcrfd^aft
öcrftc^t: S)orf) ^otfc^tag ift fein Dp\tx unb %iu6) ift fein OJebet."
S)a groHenb, fc^njcr, ber 2)onner ob feinem ^au^te jog: — 6r redte
bie ©tirn nad^ oben, fein §aar im ©türme flog. „SBol^Ian, fjört
mid^, il^r (Sötter, bie i^x im ^immel Wol^nt, S)u oor aUen, toei^er
S3albur, ber im l^eU'gen Set^ra thront! SScnn ic^ euern gorn
terfd^utbet — burd^ — unbefannte @d^ulb, — S)a6 öon ben
Slmalungen — i^r njanbtet enre ^ül\>, — SSenn id^ ben SOieinen
lebe — jum %iviö) — unb nid^t 5um §eil, — ©0 fd^Iagt mein
^aupt — i§r ©öttcr — mit eurem S5onner!eit, — $:refft mid^, ju
eurer @ü^ne, mit töblid^em (Sefd^o^: S^^r nji^t, n)ie euc^ ju
@f|ren id^ oftmals S3Iut öergofe." ©d^nett ftieg er auf ^tn ^ügel,
fd^nitt au§ be§ 3)änen §aar Sine Sode unb in§ geuer warf er fie am
Slltar: S)er ^önig ttJoHt' i^n l^emmen, gorliff ttjog fd^mer ben
©treid^: — SDa fan! bie er^obne ^anb i^m, fein ÖJefid^t warb
totenbleid^. „:^a, bummer
471 S)a§ geuer erlöfd^tc jtfd^cnb, crftidt öom Blutigen
Slag: £o§ ri§ fid^ rafc^ ber 2)äne unb lief inö getb fürbafe. Unb bie
QJoten fa^n'i? mit ©d^reto: nur gorliff f^jrang em^or: „SBo§ gafft
i^r, hm^ Äned^te? ttjag ftarrjt bu, ^öniggt^or? Sa§ fe!)'n, tt)o§ für
ein SBIenbUJerf l^ier unter bcm ^ügel tag." Unb er teilte 9lofen unb
©c^ ollen mit fd^arfem ©d^tod^tbeil* 2)0 f am öor oller Slugen,
tt)a§ ber ^ügel Borg : — 2)0 log ber ^önig f^robi in feinem offnen
©org, 5(uf feinem §ou^t ben ^ronreif, im ^önigSmontel rot: 2)od^,
ob fein 5luge gebrochen: — fein §erj toor nod) nid^t tot: (Sin
S3lutftrom oug ber SBunbe ber Sruft il^m riefelnb ronn: Unb
xMtDäxtS pxaUit ?)orIiff : „93ift bu ^ier, olter SKonn?" 2)0 lief
burd^S §eer ber ÖJoten öon SD'lunb juSJiunb bog SSort: „2)o§
SBo^rgeri^t giebt Seugniö! — i)orIiff t^ot grobiä aßorb!" Unb no^'
5U feinem S3ruber trot ^önig $ermonrid^: „2)er tote SD'ionn im
©arge verurteilt, Sruber, bid^! 2)u f:|)iclteft mit ben ÖJöttem,
^orliff, unb berlorft: 2)a§ ift ein (Gottesurteil, bofe bu biefcn gügcl
forft. Sfhin ben!e beineS (SibeS, ben hu geeibet l^oft: 93efreic bie
Slmolungen öon beineS %ivid)t§ Soft!" . 2)od^ ?)orliff, ber tritt
t)orn)ärt0 unb lod^tin ben 2)onnerbrou§ : „@o lebt il^r bod^, i§r
(äJötter? unb fd^out üom $immel oug?
472 Unb wollet einen SBiffen? unb t^uct eine Xf)ai?
SBol^I, SBiUc gegen SBttte! unb Zf)at benn gegen ^ai\ SBenn benn
bie 3lfcn leben, — fo leben bie 9hefen auc§, Unb mit ben 5lfen
tämp^tn, l^ört' ic§, ift SiiefenBrauci^. SBol^Ian benn, tapfere
@ötter, \ä) fü^te 9tiefenmut: S)em ^öttennjolf, bem gcnriS,
öertoonbt fpür' tc^ mein «tut: Sn meinem ©erjen brennt e§ toie
(SurturS i5tommen))rod;t, ®ie euren ganjen ^immel tjerbrennenb
einft entfad^t: 3§r ©Otter, auf jum Äompf benn! td^ fül^Ie
riefenftar! 3n mir t>a^ geigöerlangen nac^ ber ^rone öon
^änemorl. Sa, bonnert nur im ^immet: iä) bonnere auf ber @rb':
S^r Bli^t in ben 3SoI!en oben: boc§ ^ier unten bti^t mein
(Sd^ujert! — 3^r aber l^ört auf ?)orüff, njer ein Mann ift unb fein
SSeib: Sa, id^ fd^tug bem alten Srobi ben jal^remorfd^en ßeib, Sa,
id^ liefe bem (S5oten!önig rauben fein ^nberpaar, S)afe an^ bem
©d^Iaf erttjad^e ber toalungen 3lar Unb erfaffe feine 93eute, bie§
reid^e 5)änenlanb. 2)enn mir ift feine ^one öom ©d^idtfal
jugetoanbt. @§ ^at mir offenbaret ber ^td im SBafferfaH: Sd^ trage
grobi§ ^rone auf Setl^ra^ $:empetmaff, @^' nod^ bie Siüe tottt ift,
et)' nod^ bie ©rbbeer' rot. S)ie§ SSort reifet mid^ jum (Siege
burd^ ©d^merter unb a3Ii| unb Xob. S)rum auf, toer folgt mir,
?)orUff, jum ©türm auf bie gefte bort? 3d^ teir eud^ au§ ben
ganjen bänifd^en ^önig^^ort: S5a liegen lid^te (S|)angen öon
rotem @oIbe öiel: Sd^ geb' eud^ Sanb unb SGßaffen unb ?Rofe unb
geberf)3iel Unb feinen fott e§ reuen, ber treu gu ?)ortiff i)ätV." ^SSir
folgen bir, ©d^njargfönig, n)ir folgen bir burd^ bie »rt!"
473 ©0 riefen feine Scannen, bie h)itbeften im ^eer, 2)ic
aJlänner öon SBuIf^agen, unb ^oben bcn @c§ilb unb @^)eer. ^ic
onbern aber fd^arten nm tl^ren i^önig fic^ Unb ma^ncnb feinem
Vorüber rief §ermanaridb : . „®u bift bem @ott öerf allen, bu l^aft
bid^ if)m geweift: — @o ^ältft \>u, 9Kann be§ Un^eilg, bem
Salbur bcinen (5ib?" 5)ocl^ Sorliff ladete grimmig: „93ei @urtur, H^
ift »a^r! SBol^I benn: id^ bring' bir f eiber bein D^jfer jum TOar:
Sd^ bred^' in beinen $:em^el, SBatbnr, mit 93ronb unb aJ?orb:
©Ott id^ bein Opfer foHen, — om fd^önften faff' id^ bort." @r
ruft'S unb roubt bie ^rone öon be§ toten Si^obi ^aupt: S)ie jadCigc
©änenfronc, blutig unb beftaubt, 2)rä(it er auf feine @d^Iäfe: unb
ben ^önig§mantet rei^t @r öon ber Seid^e @d^uttern, bcr rot in
©d^arlod^ gleist, ®r jie^t au§ bem offnen (Sorge ha§ tangc
^ünenfd^ttjcrt, SSott Slunen, boppel^önbig, \>a§ njie bie @enfe
fö^rt. „Sa, bonn're nur, ©ötterl^immel, unb Ui^e mir Scuer«
fd^toang: 2)ein 93Ii^ meine ^önungSfadEet, bein Bonner mein
geftgefang." 6o gegen bie SBurg i|in fd^ritt er in SrobiS
^önigStrad^t: „Sfiun, ftolje SBatburletl^ra, bie Z^oxt meit
gemad^t! @§ fommt, eS fommt bein ^önig, ber ^änemorffönig
nol^t : ($r jie^t in feine $ofburg unb ©d^rerfen ift fein ^fab!"
474 9. ©r riefS unb fc^ritt jur 93urg !^in: i^m folgte bie
fftrrenbe @§ geUtcn laut bie ^örncr, „?)orIiff!" xi)x
@d^Iac^tge}c^rei. Sie 3)äncn bockten an geftern unb waren fidler
genug: ©ic glaubten, leidsten ©piete§ ju toerfen htn fleinen 3w9 ^
@ie brad^en ou§ ben ^ijoren fierüor in§ freie ge^b: S)a fänt^fte
ttjunberfd^rerftic^ ?)orIiff, ber fd^toarje §e(b. 3^ie (latte man ii)n
gefe^en fo ^oä) emporgetürmt: @r !öm^3fte tt)ie ein Siiefe, ber
gen SBalfjatt ftürmt. 3m SSinb ber (Sd^arlad^mantel flatterte Blutig
rot: — 3Öom ^avupt if)m bli^te bie ^one, »ie ein ©d^loeifftem
fd^recKid^ lo^t, ^od^ fd^njang er mit jmei ^änben ha§ raffenbe
^ünenfc^wert, S)a§ flammenb wie ein SBü^ftra^I unter bie %tmtt
fäl^rt: ^eH burd^ ben bumpfen S)onner fein ^ö^nenber
©c^Iod^t* ruf brang, Sm ©d^ein öon roten Stilen er unter bie
S)änen fprang. 2)a faßte fie wilb ©ntfe^en: fie wanbten fid^ jur
S^ud^t Uub l^inter i^nen faufte be§ Sliefeufd^Werteö SBuc^t: 5luf
@inen©treid^ jmei Säuen: — ha^ mar fog)orüp5lrt : — S)a mürben
beö gelben ^äfte gewaltig offenbart. SJiit ben fliel^enben geinben
brang er in ßetiira^ $:5oren ein: Sie beiben ^önig§föi)ne fäntpften
noc^ allein, ©ie mieten, immer fed^tenb, tor ?)orIiff ©c^ritt öor
©c^ritt: 2Kit einem ©c^mertfd^Iag mußt' er erfämpfen 3:ritt um
2:ritt. ©ie midien big auf be§ ©d^Ioffeg ^öd^ften SKauerranb,
SBo, geftü^t auf meifee S3al!en, ber 93atburtempel ftanb: Sort
l^ielten fie eine SSeile unb fd^öpften Sltem fd^mer: Sa brang ber
grimme Unl^oib fd^on l^inter t^nen !^er: v:
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
textbookfull.com