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

基于Spring MVC的自定义标签Tag

1.环境准备

本次小项目基于Spring

MVC进行测试呈现,项目依赖的jar文件列表如下:

a4c26d1e5885305701be709a3d33442f.png

2.搭建SpringMVC

Spring

MVC环境最关键的两个配置文件为spring配置文件与web.xml文件,spring配置文件主要声明controller的拦截,视图的解析方式等。而web.xml主要是集成spring的一些拦截器配置,字符编码配置等。具体参考如下:

springmvc-servlet.xml:

a4c26d1e5885305701be709a3d33442f.png

web.xml:

a4c26d1e5885305701be709a3d33442f.png

编写第一个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运行该项目,项目正常启动,则表示Spring

MVC环节搭建已经成功。

3.编写自定义Tag标签

本次自定义的Tag标签,实现的是一个select下拉框,在实际很多项目中,下拉值集是比较常用的组件,而下拉值集的方式很多都定义为枚举,所以将其定义为一个tag标签,在开发过程中无疑将节省开发人员的很多编写代码时间,同时又能坐到复用,充分体现编程的高内聚、低耦合特性。

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("测试枚举-"

+ (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("--请选择--");

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;

}

}

如上为本次项目的所有用到的Java源码。

编写tag文件:

在项目的WEB-INF下新建一个文件夹:tld,在tld中新建tag文件framework.tld

a4c26d1e5885305701be709a3d33442f.png

<jsp-config>

<taglib>

<taglib-uri>/frameworktaglib-uri>

<taglib-location>/WEB-INF/tld/framework.tldtaglib-location>

taglib>

jsp-config>

编写测试的jsp页面:pages/tags.jsp

a4c26d1e5885305701be709a3d33442f.png

执行情况参见如下截图:

a4c26d1e5885305701be709a3d33442f.png

下拉框的change时间测试结果:

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring MVC中整合WebSocket并获取请求参数,可以按照以下步骤进行: 1. 添加Maven依赖 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>5.2.3.RELEASE</version> </dependency> ``` 2. 配置WebSocket 在Spring MVC的配置类中添加WebSocket配置: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/websocket").setAllowedOrigins("*"); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 其中,`MyHandler`是自定义的WebSocket处理器。 3. 实现WebSocket处理器 实现`WebSocketHandler`接口,并在`afterConnectionEstablished`方法中获取请求参数: ```java public class MyHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { Map<String, String> queryParams = getQueryParams(session); // 处理WebSocket连接建立后的逻辑 } private Map<String, String> getQueryParams(WebSocketSession session) { URI uri = session.getUri(); String query = uri.getQuery(); return parseQuery(query); } private Map<String, String> parseQuery(String query) { Map<String, String> queryParams = new HashMap<>(); if (query != null) { String[] parts = query.split("&"); for (String part : parts) { String[] keyValue = part.split("="); if (keyValue.length == 2) { String key = keyValue[0]; String value = keyValue[1]; queryParams.put(key, value); } } } return queryParams; } // 其他WebSocketHandler接口的实现 // ... } ``` 在`getQueryParams`方法中,通过`WebSocketSession`对象的`getUri`方法获取请求的URI,再通过`parseQuery`方法解析出参数。 4. 客户端发送请求 在客户端使用WebSocket发送请求时,可以在URL后面添加参数: ```javascript var socket = new WebSocket("ws://localhost:8080/websocket?param1=value1&param2=value2"); ``` 这样,在WebSocket连接建立后,`MyHandler`中的`afterConnectionEstablished`方法就能够获取到这些参数了。 以上就是在Spring MVC中整合WebSocket并获取请求参数的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值