Znaczniki jsp

Post on 15-Jan-2016

29 views 0 download

description

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 - PowerPoint PPT Presentation

Transcript of Znaczniki jsp

Projektowanie warstwy serwera

Znaczniki jsp

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

2Projektowanie warstwy serwera Klasa definiująca (I)

• javax.servlet.jsp.tagext.Tag

• TagSupport• BodyTagSupport

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

3Projektowanie warstwy serwera 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

4Projektowanie warstwy serwera Znaczniki - metody

int doEndTag()

int doStartTag()

int doAfterBody()

BodyContent getBodyContent()

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

5Projektowanie warstwy serwera 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

6Projektowanie warstwy serwera 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

7Projektowanie warstwy serwera 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

8Projektowanie warstwy serwera 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

9Projektowanie warstwy serwera 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

10Projektowanie warstwy serwera ActionTag (III)

....

out.print(label);

out.println("</a>");

return SKIP_BODY;

}

}

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

11Projektowanie warstwy serwera Tag z ciałem (I)

• BodyContent:

JspWriter getEnclosingWriter()

Reader getReader()

String getString()

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

12Projektowanie warstwy serwera 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

13Projektowanie warstwy serwera 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

14Projektowanie warstwy serwera 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

15Projektowanie warstwy serwera 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

16Projektowanie warstwy serwera 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

17Projektowanie warstwy serwera 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

18Projektowanie warstwy serwera 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

19Projektowanie warstwy serwera 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

20Projektowanie warstwy serwera 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

21Projektowanie warstwy serwera 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

22Projektowanie warstwy serwera 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

23Projektowanie warstwy serwera 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

24Projektowanie warstwy serwera 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

25Projektowanie warstwy serwera 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

26Projektowanie warstwy serwera 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

27Projektowanie warstwy serwera 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

28Projektowanie warstwy serwera 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>