自定义标签开发步骤
1、 助手类
2 、tld
3 、taglib
UI标签
out:
代码示例如下:
OutTag.java
z.tld:
select:
代码示例:
SelectTag:
z.tld:
控制标签
if:
代码示例如下:
IfTag:
z.tld:
forEach
代码示例如下:
ForeachTag.java:
z.tld:
数据标签(数据标签就是用来存储数据的)
set
代码示例如下:
SetTap.java:
z.tld:
checkbox:
CheckboxTag:
public class CheckboxTag extends BodyTagSupport{
private String textKey;
private String textVal;
private List<Object> checkedVal = new ArrayList<>();
private List<Object> item = new ArrayList<>();
public String getTextKey() {
return textKey;
}
public void setTextKey(String textKey) {
this.textKey = textKey;
}
public String getTextVal() {
return textVal;
}
public void setTextVal(String textVal) {
this.textVal = textVal;
}
public List<Object> getCheckedVal() {
return checkedVal;
}
public void setCheckedVal(List<Object> checkedVal) {
this.checkedVal = checkedVal;
}
public List<Object> getItem() {
return item;
}
public void setItem(List<Object> item) {
this.item = item;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
StringBuffer sb = new StringBuffer();
String value;
String html;
for (Object obj : item) {
Field field = obj.getClass().getDeclaredField(textKey);
field.setAccessible(true);
value = (String) field.get(obj);
Field field2 = obj.getClass().getDeclaredField(textVal);
field2.setAccessible(true);
html = (String) field2.get(obj);
if(checkedVal.contains(value)) {
sb.append("<input checked type='checkbox' value='"+value+"' />"+html+"");
}else {
sb.append("<input type='checkbox' value='"+value+"' />"+html+"");
}
}
return sb.toString();
}
}
z.tld:
<tag>
<name>checkbox</name>
<tag-class>com.liyi.jsp.CheckboxTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>textKey</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>textVal</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>item</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>checkedVal</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>```