日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

java自定义标签 map_基于Spring MVC的自定义标签Tag

發(fā)布時(shí)間:2025/3/20 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自定义标签 map_基于Spring MVC的自定义标签Tag 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。