310 likes | 433 Views
Week 10. JSP Tags. JSP-page logic / code. Java-code can be used in JSP-page <% java-code %> Everything is possible But: bad habit to combine user interface with (business) logic, and data-layer. Interface and Logic/data. Differentiate between user interface and logic/data
E N D
Week 10 JSP Tags
JSP-page logic / code • Java-code can be used in JSP-page • <% java-code %> • Everything is possible • But: bad habit to combine user interface with (business) logic, and data-layer
Interface and Logic/data • Differentiate between user interface and logic/data • User interface for web-designers • Java? HTML + XML (tags) • Logic/data for software engineers • Classes and layers • Layers: controller / business logic / data (database)
JSP-tags for interface • Tags like HTML • <jsp:forward page="relative URL"/> • Tags (start- and endtags) + parameters • Tags are translated (runtime) into java-code • Tags need tag-library
Example: Page-logic (java-code) <jsp:useBean id="bean0" scope="session" class="studexercise.UserBean" /> <jsp:setProperty name="bean0" property="*" /> <% if (bean0.getLoggedIn()){ //display menu if (bean0.getIsStudent()) //user is student response.sendRedirect("studentMenu1.jsp"); else //user must be a teacher response.sendRedirect("docentMenu1.jsp"); } else {//return to login page response.sendRedirect("Start2.jsp"); } %>
Example: Page-logic (tags) <jsp:useBean id="bean0" scope="session" class="studexercise.UserBean" /> <jsp:setProperty name="bean0" property="*" /> <c:if test="${!bean0.loggedIn}"> <jsp:forward page="Start2.jsp"/> </c:if> <c:if test="${bean0.isStudent}"> <jsp:forward page="studentMenu1.jsp"/> </c:if> <jsp:forward page="docentMenu1.jsp"/>
The jsp:forward Action • Forwards request to another page • Syntax: <jsp:forward page="relative URL"/> • It has a single attribute, page, which should consist of a relative URL • This could be a static value, or could be computed at request time • Examples: <jsp:forward page="/utils/errorReporter.jsp" /> <jsp:forward page="<%= someJavaExpression %>" />
Standard Actions (list – recall) <jsp:useBean> Makes a JavaBeans component available in a page <jsp:getProperty> Gets a property value from a JavaBeans component and adds it to the response <jsp:setProperty> Set a JavaBeans property value <jsp:include> Includes the response from a servlet or JSP page during the request processing phase
Standard Actions (list2 – recall) <jsp:forward> Forwards the processing of a request to servlet or JSP page <jsp:param> Adds a parameter value to a request handed off to another servlet or JSP page using <jsp:include> or <jsp: forward> <jsp:plugin> Generates HTML that contains the appropriate client browser-dependent elements (OBJECT or EMBED) needed to execute an applet with the Java Plug-in software
JSP Action elements:External tag libraries – JSTL • JSP 1.2 introduced JSP Standard Tag Library (JSTL) • Version 1.0 released in June 2002 • Supports range of common tasks • database access, conditional loops etc • Important development for JSP technology
JSTL • 4 groups actions in JSP Standard Tag Library
How to use JSTL-libraries in a JSP • Declare the taglib directive in the JSP page • Specifies URI and Prefix • Example of declaring use of core library: <%@ taglib prefix = “c” uri = “http://java.sun.com/jstl/core %>
Foreach: example • Problem: display list of groups in dropdown-list <%@ taglib prefix="c" uri="/c.tld" %> <jsp:useBean id="groepBean" scope="session" class="studexercise.Groep" /> <select name="selectGroup"> <c:forEach items="${groepBean.groups}" var="groep"> <option><c:out value="${groep}"/></option> </c:forEach> </select>
foreach Example (more parameters) Example: JSP page using JSTL that outputs 1 to 10 on a webpageusing the <c:forEach> and <c:out> tags of the core library <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <html> <head> <title>Count to 10 Example (using JSTL)</title> </head> <body> <c:forEach var="i" begin="1" end="10" step="1"> <c:out value="${i}" /> <br /> </c:forEach> </body> </html> A taglib directive declare use of core library JSTL tag examples
JSTL: Example <c:foreach> All JSTL tags have a set of attributes (similar to HTML tags..) e.g. <c:foreach> tag has 6 attributes: var, items, varStatus, begin, end, step The full details for each attribute is in the JSTL specification document (on website). See p 65 for <c:foreach> tag definition Will need to use this document to verify WHICH tag should be used and HOW is should be used
JSTL: Example <c:out> <c:out> .. outputs a value to webpage. Usually uses just one attribute value Examples: <c:out value="${i}" /> <c:out value=“The result of 1 + 2 is ${1+2}” /> <c:out value=“param.userName" />
JSTL: Example <c:if> <c:if> .. evaluates a condition. Uses an attribute test to hold the condition Example : <%-- Simple if conditions --%> <c:if test='${param.p == "someValue"}'> Generate this template text if p equals someValue </c:if> Example 2 <c:if test='${param.p}'> Generate this template text if p equals "true“ </c:if>
JSTL: Multiple ‘if’ conditions An if/else action requires the use of the <c:choose> tag Syntax : <c:choose> body content (<when> and <otherwise> subtags) </c:choose>
JSTL: Multiple ‘if’ conditions Uses <c:choose>, <c:when> and <c:otherwise> Example: <c:choose> <c:when test='${param.p == "0"}'> <c:out value = “zero recorded”/> </c:when> <c:when test='${param.p == "1"}'> Generate this <c:out value = “single value”/> </c:when> <c:otherwise> <c:out value = “Set to ${param.p}”/> </c:otherwise> </c:choose>
JSTL: Other core <c:..> actions Other examples: (NOT a complete list!) <c:set> ….sets the value of a variable <c:remove> ….removes a scoped variable <c:catch> ….catches an exception <c:url> ….. encodes a URL <c:import>… imports the content of a resource <c:redirect>.. redirects to another URL <c:param>.. adds a request parameter to other actions
JSTL: <fmt:…..> example • JSTL contains Formatting library • tags useful for formatting numbers, times and dates • e.g. <fmt:parseDate>
JSTL: <fmt:parseDate> example <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix=“fmt" %> <html> etc etc <fmt:parseDatevalue= ${param.empDate}” var = “parsedEmpDate type = “date” pattern = “yyyy-MM-dd” /> etc etc </html> The fmt:parseDate action takes the date or time string specified by the value attribute (e.g. 2001-09-28) , interprets it according to the pattern defined by the pattern attribute and saves it in a variable called “parsedEmpDate”
JSTL: other <fmt> actions Other examples: (NOT a complete list!) <fmt:formatNumber> - formats a numeric value e.g. number of digits, currency, decimal place e.g.<fmt:formatNumber value="12.3" pattern=".000"/> will output “12.300” <fmt:formatDate> --formats a date and time
Tag Library Descriptor • TLD binds the custom tags to Java-classes ‘behind the code’ that implement the tags <taglib> … <description>Custom tags voor Saxion Hogeschool</description> … <tag> <name>showStudent</name> <tag-class>org.saxion.ict.tags.ShowStudentTagImpl</tag-class> <body-content>empty</body-content> <attribute> <name>name</name> <required>true</required> </attribute> … </tag> </taglib>
JSTL in Jbuilder • .Jar must be in lib • Tld must be in module library • In Jbuilder: • Tools/add lib • Add lib to project
jstl.jar JBuilder • JSTL-tag-library installed by default in JBuilderX • to use it you must alter a few settings in JBuilder: • 1.you will have to add the library to your project. • 2.Then copy the c.tld (see installed files in JBuilder-directory!) to the module-directory. Now it should work. • NO! • 3. Lib must ALSO be in WEB-INF?! Copy it manually!
Examples (code) • Problem: • Display dropdown-list with names of students • How to populate the list? • Values must be filled with loop! • while (or iterator) in Java • How to use JSP-tags? • 2 solutions: repeater and foreach
ForEach-tag (JSTL) //now we use the forEach-tag to loop through the list //the field (getter!) personsNotInGroup returns an ArrayList. //That arraylist implements Iterator, so it can loop. //Every loop the variable "userid" is created, and the contents of that "userid" //can be printed on the HTML-page (c:out-tag) <select name="studentToBeAdded"> <c:forEach items="${groupBean.personsNotInGroup}" var="userid"> <option><c:out value="${userid}"/></option> </c:forEach> </select>
Custom Actions (Tag Libraries) • Can Define Your own! • Description • Define • Install • Declare • Use • Details in JavaServer Pages 2nd ed found on Safari Techbooks
Custom tag implementatie package org.saxion.ict.tags; import javax.jsp.tagext.TagSupport; … public class ShowStudentTagImpl extends TagSupport { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } private String scope; … public int doEndTag() { try { HttpSession session=pageContext.getSession(); Student student=(Student)session.getAttribute(name); pageContext.getOut().println(“<TD>Naam:”+student.getLastName()+”</TD>”); … } catch (Exception ignored) { } return EVAL_PAGE; } … }
zie Tomcat 5 examples panel.jsp <%@ attribute name="color" %><%@ attribute name="bgcolor" %><%@ attribute name="title" %><table border="1" bgcolor="${color}"> <tr><td><b>${title}</b></td></tr> <tr><td bgcolor="${bgcolor}"><jsp:doBody/></td></tr></table> …<tags:panel color=“blue" bgcolor=“white" title="Panel 1"> Inhoud van een panel.<br/></tags:panel>…<tags:panel color=“white" bgcolor=“black" title="Panel 1"> Inhoud van een ander panel.<br/></tags:panel>… panel.tag