javascript
java自定义标签 map_基于Spring MVC的自定义标签Tag
基于Spring MVC的自定義標(biāo)簽Tag
1.環(huán)境準(zhǔn)備
本次小項(xiàng)目基于Spring
MVC進(jìn)行測(cè)試呈現(xiàn),項(xiàng)目依賴的jar文件列表如下:
2.搭建SpringMVC
Spring
MVC環(huán)境最關(guān)鍵的兩個(gè)配置文件為spring配置文件與web.xml文件,spring配置文件主要聲明controller的攔截,視圖的解析方式等。而web.xml主要是集成spring的一些攔截器配置,字符編碼配置等。具體參考如下:
springmvc-servlet.xml:
web.xml:
編寫第一個(gè)Controller:
TagsController.java
package com.keith.smvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import
org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TagsController {
@RequestMapping("/tags.do")
public
String getTagsPage(Model model) {
return "tags";
}
}
使用tomcat7運(yùn)行該項(xiàng)目,項(xiàng)目正常啟動(dòng),則表示Spring
MVC環(huán)節(jié)搭建已經(jīng)成功。
3.編寫自定義Tag標(biāo)簽
本次自定義的Tag標(biāo)簽,實(shí)現(xiàn)的是一個(gè)select下拉框,在實(shí)際很多項(xiàng)目中,下拉值集是比較常用的組件,而下拉值集的方式很多都定義為枚舉,所以將其定義為一個(gè)tag標(biāo)簽,在開發(fā)過程中無疑將節(jié)省開發(fā)人員的很多編寫代碼時(shí)間,同時(shí)又能坐到復(fù)用,充分體現(xiàn)編程的高內(nèi)聚、低耦合特性。
package com.keith.smvc.model;
public classEnumEntity {
private Long id;
private String enumCode;
private String enumValue;
private String enumTextCn;
private String enumTextEn;
private Integer
sortNumber;
private String description;
public Long getId() {
return id;
}
public void setId(Long
id)
{
this.id
=
id;
}
public String getEnumCode()
{
return enumCode;
}
public void setEnumCode(String
enumCode) {
this.enumCode
=
enumCode;
}
public String getEnumValue()
{
return enumValue;
}
public void setEnumValue(String
enumValue) {
this.enumValue
=
enumValue;
}
public String getEnumTextCn()
{
return enumTextCn;
}
public void setEnumTextCn(String
enumTextCn) {
this.enumTextCn
=
enumTextCn;
}
public String getEnumTextEn()
{
return enumTextEn;
}
public void setEnumTextEn(String
enumTextEn) {
this.enumTextEn
=
enumTextEn;
}
public Integer getSortNumber()
{
return sortNumber;
}
public void setSortNumber(Integer
sortNumber) {
this.sortNumber
=
sortNumber;
}
public String getDescription()
{
return description;
}
public void setDescription(String
description) {
this.description
=
description;
}
}
package
com.keith.smvc.service;
import
java.util.ArrayList;
import
java.util.List;
import
com.keith.smvc.model.EnumEntity;
public
class EnumService {
private List enumEntities = new ArrayList();
public List findEnumEntityAll() {
for (int i = 0; i < 5; i++) {
EnumEntity entity = new EnumEntity();
entity.setId(Long.valueOf(i + 1));
entity.setEnumCode("TEST_CODE_" + (i + 1));
entity.setEnumValue("TEST_VALUE_" + (i + 1));
entity.setEnumTextCn("測(cè)試枚舉-"
+ (i + 1));
entity.setEnumTextEn("Test Enum " + (i + 1));
entity.setSortNumber((i + 1));
entity.setDescription("spring mvc self define tags.");
this.enumEntities.add(entity);
}
return this.enumEntities;
}
}
package com.keith.smvc.utils;
import org.apache.commons.lang3.RandomStringUtils;
public classPrimaryKeyUtils
{
public static Long
generateKeyByCountAndLength(int
count, int length)
{
StringBuffer key = new StringBuffer();
for (int
i =
0; i <
count; i++)
{
key.append(i
> 0 ?
generateByLength(length,
false) :
generateByLength(length,
true));
}
return Long.valueOf(key.toString());
}
public static String
generateByLength(int
length, boolean checkStartByZero) {
String key =
RandomStringUtils.randomNumeric(length);
return checkStartByZero &&
key.matches("^0\\d*$")
? generateByLength(length,
checkStartByZero) : key;
}
}
package
com.keith.smvc.tags;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
java.util.Map.Entry;
import
javax.servlet.jsp.JspException;
import
javax.servlet.jsp.JspTagException;
import
javax.servlet.jsp.tagext.BodyTagSupport;
import
javax.servlet.jsp.tagext.DynamicAttributes;
import
org.apache.commons.collections.CollectionUtils;
import
org.apache.commons.collections.MapUtils;
import
org.apache.commons.lang3.StringEscapeUtils;
import
org.apache.commons.lang3.StringUtils;
import
com.alibaba.fastjson.JSONObject;
import
com.alibaba.fastjson.serializer.SerializerFeature;
import
com.keith.smvc.model.EnumEntity;
import
com.keith.smvc.service.EnumService;
import
com.keith.smvc.utils.PrimaryKeyUtils;
public
class EnumTag extends BodyTagSupport implements DynamicAttributes
{
private static final long serialVersionUID =
3214120436850413923L;
private Map attributesMap = new HashMap();
@Override
public void setDynamicAttribute(String uri, String name, Object
value) throws JspException {
this.attributesMap.put(name, value);
}
private String buildSelectHTML() {
String superClass = "";
if (attributesMap.containsKey("class")) {
attributesMap.put("class", String.format("%s %s", superClass,
MapUtils.getString(attributesMap, "class")));
} else {
attributesMap.put("class", superClass);
}
if (!attributesMap.containsKey("id") &&
!attributesMap.containsKey("name")) {
Long key = PrimaryKeyUtils.generateKeyByCountAndLength(2,
4);
attributesMap.put("id", key);
attributesMap.put("name", key);
} else if (attributesMap.containsKey("id") &&
attributesMap.containsKey("name")) {
attributesMap.put("id", MapUtils.getString(attributesMap,
"id"));
attributesMap.put("name", MapUtils.getString(attributesMap,
"name"));
} else if (attributesMap.containsKey("id")) {
attributesMap.put("id", MapUtils.getString(attributesMap,
"id"));
} else if (attributesMap.containsKey("name")) {
attributesMap.put("name", MapUtils.getString(attributesMap,
"name"));
}
if (!attributesMap.containsKey("displayEmptyChoose")) {
attributesMap.put("displayEmptyChoose", true);
}
StringBuffer html = new StringBuffer();
html.append("--請(qǐng)選擇--");
return html.toString();
}
private String convertTargetProperty() {
EnumService enumService = new EnumService();
ListenumEntities = enumService.findEnumEntityAll();
if (CollectionUtils.isEmpty(enumEntities)) {
return "";
}
return enumEntities.get(0).getEnumTextCn();
}
@Override
public int doStartTag() throws JspTagException {
return EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspTagException {
String type = MapUtils.getString(attributesMap, "type",
"SELECT");
String result = "";
try {
switch (type) {
case "SELECT":
result = this.buildSelectHTML();
break;
case "JSON":
result = JSONObject.toJSONString(new
EnumService().findEnumEntityAll(),
SerializerFeature.DisableCircularReferenceDetect);
break;
case "CONVERT":
result = this.convertTargetProperty();
break;
default:
break;
}
super.pageContext.getOut().print(result);
} catch (Exception e) {
throw new JspTagException(e.getMessage());
}
this.attributesMap.clear();
return SKIP_BODY;
}
}
如上為本次項(xiàng)目的所有用到的Java源碼。
編寫tag文件:
在項(xiàng)目的WEB-INF下新建一個(gè)文件夾:tld,在tld中新建tag文件framework.tld
<jsp-config>
<taglib>
<taglib-uri>/frameworktaglib-uri>
<taglib-location>/WEB-INF/tld/framework.tldtaglib-location>
taglib>
jsp-config>
編寫測(cè)試的jsp頁(yè)面:pages/tags.jsp
執(zhí)行情況參見如下截圖:
下拉框的change時(shí)間測(cè)試結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的java自定义标签 map_基于Spring MVC的自定义标签Tag的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web从入门到精通视频_Jav
- 下一篇: js动态创建html控件,通过JS动态添