280 likes | 437 Views
Znaczniki jsp. Klasa definiująca (I). javax.servlet.jsp.tagext.Tag TagSupport BodyTagSupport. Klasa definiująca (II). javax.servlet.jsp.tagext.TagSupport org.springframework.web.servlet.tags.RequestContextAwareTag org.springframework.web.servlet.tags.HtmlEscapingAwareTag
E N D
Klasa definiująca (I) • javax.servlet.jsp.tagext.Tag • TagSupport • BodyTagSupport Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Klasa definiująca (II) javax.servlet.jsp.tagext.TagSupport org.springframework.web.servlet.tags.RequestContextAwareTag org.springframework.web.servlet.tags.HtmlEscapingAwareTag org.springframework.web.servlet.tags.form.AbstractFormTag org.springframework.web.servlet.tags.form. AbstractDataBoundFormElementTag org.springframework.web.servlet.tags.form.AbstractHtmlElementTag org.springframework.web.servlet.tags.form. AbstractHtmlInputElementTag org.springframework.web.servlet.tags.form.InputTag Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Znaczniki - metody int doEndTag() int doStartTag() int doAfterBody() BodyContent getBodyContent() Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Najprostszy przykład public class PrzykladTag extends TagSupport { public int doStartTag() { JspWriter out = pageContext.getOut(); out.print(„Przykladowy tag"); return(SKIP_BODY); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Zastosowanie znacznika <%@ taglib uri="http://www.my.pl/mytags" prefix="mytags" %> ... <BODY> <H1><mytags:przyklad/></H1> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tagi z atrybutami <prefix:name attribute1="value1" attribute2="value2" ... /> public void setAttribute1(String value1) { .... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
ActionTag (I) public class ActionTag extends TagSupport { private String label; private String option; private String icon; public int doEndTag() throws JspException { return EVAL_PAGE; } .... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
ActionTag (II) public int doStartTag() throws JspException { JspWriter out = pageContext.getOut(); out.print("<a class=\"option\””); out.print("onclick=\"return submitOption('"); out.print(option); out.print("');\"><img alt=\"\" src=\""); out.print(icon); out.print("\">"); ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
ActionTag (III) .... out.print(label); out.println("</a>"); return SKIP_BODY; } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag z ciałem (I) • BodyContent: JspWriter getEnclosingWriter() Reader getReader() String getString() Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag z ciałem (II) • EVAL_BODY_INCLUDE - ponowne przetwarzanie treści tagu • SKIP_BODY – zakończenie przetwarzania Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag z ciałem - przykład (I) public class FiltrTag extends BodyTagSupport { public int doAfterBody() { BodyContent body = getBodyContent(); String filteredBody = ServletUtilities.filter(body.getString()); JspWriter out = body.getEnclosingWriter(); out.print(filteredBody); return(SKIP_BODY); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Button (I) public class ButtonTag extends BodyTagSupport { private String name; private String value; private String type; private Boolean disabled; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Button (II) public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); out.print("</button>"); return EVAL_PAGE; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Button (II) public int doStartTag() throws JspException { JspWriter out = pageContext.getOut(); out.print("<button"); if (StringUtils.hasText(value)) { out.print(" value=\""); out.print(value); out.print('"'); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Button (III) if (Boolean.TRUE.equals(disabled)) out.print(" disabled=\"disabled\""); out.print(">"); return EVAL_BODY_INCLUDE; } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tagi zagnieżdżone (I) public class DrugiTag extends BodyTagSupport { public int doStartTag() throws JspTagException { PierwszyTag parent = (PierwszyTag) findAncestorWithClass(this, PierwszyTag.class); .... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tagi zagnieżdżone (II) if (parent == null) { throw new JspTagException("nesting error"); } else { ... } return(EVAL_BODY_TAG); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
InputTag (I) public class MyInputTag extends AbstractHtmlInputElementTag { public static final String SIZE_ATTRIBUTE = "size"; public static final String MAXLENGTH_ATTRIBUTE = "maxlength"; public static final String ALT_ATTRIBUTE = "alt"; public static final String ONSELECT_ATTRIBUTE = "onselect"; public static final String READONLY_ATTRIBUTE = "readonly"; public static final String AUTOCOMPLETE_ATTRIBUTE = "autocomplete"; private String size; private String maxlength; private String alt; private String onselect; private String autocomplete; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
InputTag (II) protected int writeTagContent(TagWriter tagWriter) throws JspException { tagWriter.startTag("input"); writeDefaultAttributes(tagWriter); tagWriter.writeAttribute("type", getType()); writeOptionalAttribute(tagWriter, "onkeypress", "return filterKey('[\\\\d\\\\s\\\\,\\\\-]', event)"); writeValue(tagWriter); tagWriter.closeTag(); return EVAL_PAGE; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
InputTag (III) protected void writeValue(TagWriter tagWriter) throws JspException { tagWriter.writeAttribute("value", getDisplayString(getBoundValue(), getPropertyEditor())); } protected String getType() { return "text"; } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
InputTag (disabled) (I) protected boolean isDisabled() throws JspException { String dis = (String) evaluate(DISABLED_ATTRIBUTE, getDisabled()); Boolean canEdit = (Boolean) pageContext.getSession().getAttribute(”canEdit”); if ( canEdit != null && canEdit == false) return true; ..... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
InputTag (disabled) (II) if (dis == null ) { Set<String> allowedFields = (Set<String>) request.getAttribute(”allowed”); if (allowedFields != null) { if (!allowedFields.contains(getNestedPath()+ getPath())) return true; } } return "true".equals(dis); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag - konfiguracja (web.xml) <jsp-config> <taglib> <taglib-uri>http://www.my.pl/mytags</taglib-uri> <taglib-location>/WEB-INF/mytags.tld</taglib-location> </taglib> </jsp-config> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag - konfiguracja (I) mytags.tld <display-name>mytags</display-name> <tlib-version>2.0</tlib-version> <short-name>mytags</short-name> <uri>http://www.my.pl/mytags</uri> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag - konfiguracja (II) <tag> <name>przyklad</name> <tagclass>dmcs.tags.PrzykladTag</tagclass> <info>Tag przykładowy</info> <bodycontent> JSP </bodycontent> <attribute> <name>atrybut1</name> <required>true</required> </attribute> </tag> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Tag - konfiguracja (III) <tag> <description>Icon option</description> <name>action</name> <tag-class>tags.ActionTag</tag-class> <body-content>empty</body-content> <attribute> <name>label</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego