znaczniki jsp
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 PresentationTRANSCRIPT
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>