I < 3 Tag-Dateien, aber das führende Entwickler von JSTL raucht Crack, wenn sie das wirklich gesagt haben. Sie können nicht alle Tag-Bibliothek-Tags als Tag-Datei-Tags neu schreiben, aus einem sehr wichtigen Grund: Tag-Dateien können nicht:
Rückgabe EVAL_BODY_INCLUDE;
Mit anderen Worten, Tag-Dateien haben nur drei Optionen für ihren Körper-Inhalt:
leer: keinen inneren Gehalt, das heißt. < someTag/>
schreibgeschützt: kein JSP innerer Inhalt, dh. <SOMETAG> <p> Hallo Welt </p > </SOMETAG > ist ok, aber nicht <SOMETAG> <p> <% = helloWorld.toString()% > </p > </SOMETAG >
tagdependent: Sie können JSP inneren Inhalt haben, aber es wird nicht als solcher verarbeitet; stattdessen müssen Sie analysieren/machen es jedoch, das Sie fit
Aber mit den alten Stil-Tag-Bibliothek-Tags angezeigt wird, können Sie haben: < Körper Inhalt > JSP </body-Inhalt > (in der TLD-Datei) und dann "EVAL_BODY_INCLUDE zurückgeben" von Ihrem "doStartTag". Wenn Sie dies tun, werden alle Ihre JSP-Direktiven so analysiert, als wären sie ein normaler Teil Ihrer Seite, und Ihr Tag umschließt sie einfach mit dem entsprechenden Inhalt.
Persönlich ist meine Faustregel: Verwenden Sie Tag-Dateien wann immer Sie können, dh. Wann immer Sie keine JSP-Direktiven benötigen, um innerhalb des Tags zu arbeiten, weil sie millionenfach sauberer sind, einfacher für Nicht-Programmierer, benötigen Sie kein tld (naja, wenn Sie sie in einem separaten Namespace behalten) Ihre Tag-Bibliothek-Tags).
Wenn Sie jedoch JSP-Inhalt in Ihrem Tag haben möchten, ist Ihre einzige Option Tag-Library-Tags. Hoffentlich werden die JSP-Leute eines Tages eine Möglichkeit zur Verarbeitung von JSP-Anweisungen innerhalb eines Tag-Datei-Tags veröffentlichen, und dann können wir die alten klassenbasierten Tags wirklich aufgeben, aber bis dahin versuchen Sie bitte nicht, alle Tags mit Tag-Dateien zu machen , da Sie schnell auf die Erstellung benutzerdefinierter Tags für jedes letzte Stück Logik verzichten können (da dies die einzige Möglichkeit ist, Logik ohne die Verwendung von JSP-Direktiven auszuführen).