znaczniki jsp

28
Projektowanie warstwy serwera Znaczniki jsp

Upload: uri

Post on 15-Jan-2016

28 views

Category:

Documents


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

Page 1: Znaczniki jsp

Projektowanie warstwy serwera

Znaczniki jsp

Page 2: 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

Page 3: Znaczniki jsp

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

Page 4: Znaczniki jsp

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()

Page 5: Znaczniki jsp

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);

}

}

Page 6: Znaczniki jsp

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>

Page 7: Znaczniki jsp

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) {

....}

Page 8: Znaczniki jsp

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;

}

....

Page 9: Znaczniki jsp

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("\">");

...

Page 10: Znaczniki jsp

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;

}

}

Page 11: Znaczniki jsp

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()

Page 12: Znaczniki jsp

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

Page 13: Znaczniki jsp

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);}

}

Page 14: Znaczniki jsp

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;

Page 15: Znaczniki jsp

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;

}

Page 16: Znaczniki jsp

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('"');

}

Page 17: Znaczniki jsp

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;

}

}

Page 18: Znaczniki jsp

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);

....

Page 19: Znaczniki jsp

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);

}}

Page 20: Znaczniki jsp

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;

Page 21: Znaczniki jsp

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;

}

Page 22: Znaczniki jsp

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";

}

}

Page 23: Znaczniki jsp

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;

.....

Page 24: Znaczniki jsp

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);

}

Page 25: Znaczniki jsp

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>

Page 26: Znaczniki jsp

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>

Page 27: Znaczniki jsp

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>

Page 28: Znaczniki jsp

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>