170 likes | 323 Views
JSP Tag Files. 4.1.0.3. Unit objectives. After completing this unit, you should be able to: Describe the use of JSP tag files Call a tag file from a JSP Pass body content, parameters and fragments to a tag file Create a tag file and use the tag file directives Package a tag file.
E N D
JSP Tag Files 4.1.0.3
Unit objectives After completing this unit, you should be able to: • Describe the use of JSP tag files • Call a tag file from a JSP • Pass body content, parameters and fragments to a tag file • Create a tag file and use the tag file directives • Package a tag file
Overview of Tag Files • Another way to build custom actions • Tag files are JSPs with .tag or .tagx extensions • Allows non-Java developers to create reusable custom actions • Are automatically interpreted by the JSP container when placed in the /WEB-INF/tags folder • Custom action name is the same as the tag file name • Can be further organized in sub-folders of /WEB-INF/tags • Tag files are separate files that are called from JSPs Caller JSP <info:TagFile1 …/> <info:TagFile2> …body content… </info:TagFile2> TagFile1.tag TagFile2.tag
Calling a Tag File from a JSP • Resembles the invocation of a custom action • Tag files are automatically compiled into SimpleTags • More powerful than a <jsp:include> that can only accept string parameters in the request • The tag file has access to implicit objects • The tag file can be passed • Body content: content in between the begin and end tag • Parameters • Fragments: individually named body content • For example to call details.tag from a caller JSP <%@taglib tagdir="/WEB-INF/tags" prefix="info" %> <info:details loanedCopy="${item}"/>
Body Content from Caller JSP • Body Content can be: scriptless, tagdependent or empty • Tag files can use <jsp:doBody/> to use the body content • Caller JSP <info:toUpper> Uppercase this text </info:toUpper> • toUpper.tag (Tag file) <%@ tag body-content="scriptless"%> <p style="text-transform:uppercase"> <jsp:doBody/> </p> Body Content
Parameters from Caller JSP • Passed as attributes to the tag file • Matches an attribute, with the same name, in the tag file <info:details loanedCopy="${item}"/> • Can be a dynamic list of attributes • Handled in the tag file by a Map, thus order is not guaranteed • Can be mixed with defined attributes <info:details dyna1="first" loanedCopy="${item}" dyna2="second"/> parameter defined parameter mixed in with 2 dynamic parameters
Fragments from Caller JSP • Enable the calling page to pass in named fragments of body content • <jsp:body> is used to define the main body content <info:fragmentTest> <jsp:attribute name="headerFragment"> <h1>Welcome to the IBM Library System </h1> </jsp:attribute> <jsp:attribute name="footerFragment"> System has ${library.size} books </jsp:attribute> <jsp:body> ${item.title} ${item.author} </jsp:body> </info:fragmentTest>
Tag Directive in Tag File • Attribute list for the directive • display-name • body-content: empty, scriptless or tagdependent • dynamic-attributes: name of the attribute map • small-icon • large-icon • description • example • language: scripting language • import: list of imports • pageEncoding • isELIgnored: true of false • For example <%@ tag body-content="empty"%>
Attribute Directive in Tag File • Maps incoming parameters to variables • Attribute list for the directive • name • required: true or false • fragment: true or false • rtexprvalue: true or false • type: type of the attribute • description • For example <%@ attribute name="loanedCopy" required="true" type="com.ibm.library.model.LoanedCopy"%> • Dynamic attribute map, is defined in the tag directive <%@tag dynamic-attributes="elements" %> <c:forEach var="element" items="${elements}" > ${element.key} : ${element.value} </c:forEach>
Variable Directive in Tag File • Exposes variables to the calling page • A name can be given to the attribute or can be assigned from an attribute • if assigned from an attribute an alias needs to be defined to reference the attribute within the tag file • Attribute list for the directive • name-given or name-from attribute, with an alias • variable-class • scope: AT_BEGIN, AT_END or NESTED • description • For example • <%@ variable name-given="returnValue" scope="AT_BEGIN" %> • <c:set var="returnValue" value="5% interest"/>
Implicit Objects Available in a Tag File • Collection of objects available to the tag file • request: ServletRequest or HttpServletRequest • response: ServletResponse or HttpServletResponse • jspContext: JspContext for this tag file • session: HttpSession • application: ServletContext • out: JspWriter • config: ServletConfig
Example of Calling a Tag File • Tag invocation in ListItems.jsp (Caller JSP) <%@taglib tagdir="/WEB-INF/tags" prefix="info" %> <info:details loanedCopy="${item}"/> • Tag definition in details.tag (Tag file) <%@ tag body-content="empty"%> <%@ attribute name="loanedCopy" required="true" type="com.ibm.library.model.LoanedCopy"" %> <h1>Times Renewed = ${loanedCopy.timesRenewed} </h1>
Tag File with Body Content and a Fragment • Tag files can be passed fragments and evaluate the separately, using <jsp:invoke fragment="fragmentName"/> • Calling JSP <info:fragmentTest> <jsp:attribute name="moreContent"> Fragment 1</jsp:attribute> <jsp:body>Body content </jsp:body> </info:fragmentTest> • fragmentTest.tag <%@ attribute name="moreContent" fragment="true"%> <jsp:invoke fragment="moreContent" /> <jsp:doBody/>
Tag File Packaging • A tag file is recognized by the container if placed in /WEB-INF/tags/ folder • Tag file does not need TLD • At tag file placed in the /META-INF/tags folder of a JAR file requires a TLD • The JAR file is placed in the /WEB-INF/lib folder • Tags can also be packaged as compiled Java classes
Checkpoint • Where can a tag file need to be placed to be automatically picked up by the JSP container? • Why use a tag file instead of writing a custom tag handler?
Checkpoint solutions • /WEB-INF/tags • Allows non-Java developers to create reusable custom actions. Also externalizes any HTML and layout information that may creep into a tag handler class.
Unit summary Having completed this unit, you should be able to: • Describe the advantages of using JSP custom tags • List the major steps in developing and using JSP custom tags • Develop basic tag handler classes to implement JSP custom tags • Create and modify taglib descriptor files • Package JSP taglib implementation classes and taglib descriptor files • Understand the uses of the JSTL • Name some of the tags included in the JSTL and their purposes • Create and call a tag file from a JSP