`

java--自定义标签--(价格策略中应用)

阅读更多

又用到java自定义标签,我比较不喜欢用它,没上心看,但是还得用啊!

1.先上我的代码,使用java自定义标签

1.1PSCheckboxTag.tag

<%@ tag pageEncoding="UTF-8" import="java.util.*,com.hanpeng.base.util.SelectManager,com.hanpeng.base.util.SelectManagerRequest" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="id"  required="true" rtexprvalue="true"%>
<%@ attribute name="name"  required="true" rtexprvalue="true"%>
<%@ attribute name="mainid"  required="true" rtexprvalue="true"%>
<%@ attribute name="required" required="false" rtexprvalue="true" type="java.lang.Boolean"%>

<%@ attribute name="isSelect"   required="false" rtexprvalue="true" type="java.lang.String[]"%> <!--  -->
<%@ attribute name="isShowHead"   required="false" rtexprvalue="true" type="java.lang.Boolean"%> <!-- 是否显示请选择 -->
<%@ attribute name="headinfo"   required="false" rtexprvalue="true" %> <!-- 自定义下拉框默认显示 -->
<%@ attribute name="sendMethod"   required="false" rtexprvalue="true" %> <!-- 调用参数 -->
<%@ attribute name="disabledstate"   required="false" rtexprvalue="true" %> <!-- 可传任意值  如:disabled=true -->
<%@ attribute name="widlength"   required="false" rtexprvalue="true" %> <!-- 设置宽度 -->
<%@ attribute name="diyClass"   required="false" rtexprvalue="true" %> <!-- 自定义样式 -->

<%@ attribute name="sendShowTitle"   required="false" rtexprvalue="true" %> <!-- 传入标题名称 -->
<%@ attribute name="sendOnChangeJs"   required="false" rtexprvalue="true" %> <!-- 指定方法JS -->

<%
	java.util.List list = null;
	if(sendMethod != null){
		if("zaiXinZhiFuXinXi".equals(sendMethod)) list = SelectManager.zaiXinZhiFuXinXi(); /* 在线支付渠道 */
		if("cunKuanYinHang".equals(sendMethod)) list = SelectManagerRequest.getCunKuanYinHang(request); /* 在线支付渠道 */
		if("getThreeMonthBefore".equals(sendMethod)) list = SelectManager.getThreeMonthBefore(); /* 本月前三月 */
		if("getMoneyType".equals(sendMethod)) list = SelectManager.getMoneyType(); /* 面值类型 */
	}
%>
<input type="checkbox" id="<%=mainid %>" name="<%=mainid %>" class="<%=diyClass %>" onclick="<%=sendOnChangeJs %>"/>&nbsp;&nbsp;<%=sendShowTitle%>&nbsp;&nbsp;
<%	if(list != null){
		for (int i=0;i<list.size();i++ ){
			java.util.HashMap ot = (java.util.HashMap)list.get(i);
			String oti = ot.get("val").toString();
			if(isSelect != null){
				%> <input type="checkbox" id="<%=id %>" name="<%=name %>" value="<%=ot.get("val")%>" <%
				for(int j=0;j<isSelect.length;j++){
					String tid = isSelect[j];
					if(tid.equals(oti)){
						%> checked="checked" 
						<%
					}
				}
				%> onClick="doRemovethis()"/>&nbsp;<%=ot.get("key") %>&nbsp;&nbsp; <%
			}else{
				%> <input type="checkbox" id="<%=id %>" name="<%=name %>" value="<%=ot.get("val")%>" onClick="doRemovethis()"/>&nbsp;<%=ot.get("key") %>&nbsp;&nbsp; <%
			}
		}
	}
%>

<script>
/* 全选/反选  */
function doSelectAll(val){
	var checkThis = document.getElementById('<%=mainid %>').checked;
	var checkList = document.getElementsByName('<%=id %>');

	if(checkThis == false){
		for(var i=0;i<checkList.length;i++){
			checkList[i].checked = false;
		}
	}else if(checkThis == true){
		for(var i=0;i<checkList.length;i++){
			checkList[i].checked = true;
		}
	}
}

/* 去掉全选 */
function doRemovethis(){
	document.getElementById('<%=mainid %>').checked = false;
}
</script>

 

1.2 showPriceStrategy.jsp中引用

<%@ taglib prefix="spes" tagdir="/WEB-INF/tags" %>

		<tr>
			<td align="right">
				面值:
			</td>
			<td>
			   <div id="divMoney">
					<spes:PSCheckboxTag 
						id="money" name="money"
						mainid="moneyAll"
						diyClass="sel" isShowHead="false" 
						sendMethod="getMoneyType"
						sendShowTitle="全部"
						sendOnChangeJs="doSelectAll(this.value)"
						isSelect="<%=request.getParameterValues("money") %>" 
					/>
			  </div>
			</td>
			<td><span id="textMoney">&nbsp;</span></td>
		</tr>

 

 1.3 SelectManager.java工具类中代码

//------------------------------------------------------------------------------
//文   件  名:                                            版           本:
//描          述:
//版权所有:杭州瀚鹏科技有限公司 
//------------------------------------------------------------------------------
//创  建   者:sgdjava          创建日期:2011-6-15
//修  改   者:                                             修改日期:
//修改说明:
//------------------------------------------------------------------------------
package com.hanpeng.base.util;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.hanpeng.base.util.memoryCtrl.DictionaryCtrl;

 /**
 * @author sgdjava
 * @date 2011-6-15 上午10:06:44
 *
 */
@SuppressWarnings("unchecked")
public class SelectManager {
	
	/**月份中文名*/
	private final static String[] MONTHC = {
		"一月","二月","三月",
		"四月","五月","六月",
		"七月","八月","九月",
		"十月","十一月","十二月",
	};
	
	/**
	 * 在线支付信息 	k=状态名称,v=0/2; t=t_dictionary
	 */
	public static List zaiXinZhiFuXinXi(){
		String[] sval = "65,66".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("65")
				+","+DictionaryCtrl.getServiceName("66")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 银行对帐,匹配状态 	k=状态名称,v=0/2; t=t_dictionary
	 */
	public static List yinHangPiPeiZT(){
		String[] sval = "0,2".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("0")
				+","+DictionaryCtrl.getServiceName("2")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 处理状态,未处理,处理成功
	 */
	public static List chulizhuangtai(){
		String[] sval = "0,2".split(",");// value
		String[] skey = ("处理成功,未处理").split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 自动续期	k=状态名称,v=10/11;t=t_dictionary
	 */
	public static List ziDongXvQi(){
		String[] sval = "10,11".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("10")
				+","+DictionaryCtrl.getServiceName("11")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 套餐记录类型	k=类型名称,v=155~159;t=t_dictionary
	 */
	public static List taoCanJiLuLeiXing(){
		String[] sval = "155,156,157,158,159".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("155")
				+","+DictionaryCtrl.getServiceName("156")
				+","+DictionaryCtrl.getServiceName("157")
				+","+DictionaryCtrl.getServiceName("158")
				+","+DictionaryCtrl.getServiceName("159")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 读取状态	k=状态名称,v=16/17;t=t_dictionary
	 */
	public static List duQvZhuangTai(){
		String[] sval = "16,17".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("16")
				+","+DictionaryCtrl.getServiceName("17")).split(",");// key
		return allList(sval,skey);
	}
	
	/**
	 * 公告类型	k=类型名称,v=20~24;t=t_dictionary
	 */
	public static List gongGaoLeiXing(){
		String[] sval = "20,21,22,23,24".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("20")
				+","+DictionaryCtrl.getServiceName("21")
				+","+DictionaryCtrl.getServiceName("22")
				+","+DictionaryCtrl.getServiceName("23")
				+","+DictionaryCtrl.getServiceName("24")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 公告展示	k=展示类型,v=26~28;t=t_dictionary
	 */
	public static List gongGaoZhanShi(){
		String[] sval = "26,27,28".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("26")
				+","+DictionaryCtrl.getServiceName("27")
				+","+DictionaryCtrl.getServiceName("28")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	
	/**
	 * 记录类型	k=类型名称,v=9/30/31/34/35/33/82/97/98/99
	 */
	public static List jiLuLeiXing(){
		String[] sval = "9,30,31,32,33,82,97,98,99,154".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("9")
				+";"+DictionaryCtrl.getServiceName("30")
				+";"+DictionaryCtrl.getServiceName("31")
				+";"+DictionaryCtrl.getServiceName("32")
				+";"+DictionaryCtrl.getServiceName("33")
				+";"+DictionaryCtrl.getServiceName("82")
				+";"+DictionaryCtrl.getServiceName("97")
				+";"+DictionaryCtrl.getServiceName("98")
				+";"+DictionaryCtrl.getServiceName("99")
				+";"+DictionaryCtrl.getServiceName("154")).split(";");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 运营商	k=运营商,v=40/41/42;t=t_dictionary
	 */
	public static List yunYingShang(){
		String[] sval = "40,41,42".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("40")
				+","+DictionaryCtrl.getServiceName("41")
				+","+DictionaryCtrl.getServiceName("42")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 号码类型	k=类型名称,v=45/56/57;t=t_dictionary
	 */
	public static List haoMaLeiXing(){
		String[] sval = "45,46".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("45")
				+","+DictionaryCtrl.getServiceName("46")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 冲正状态	k=状态名称,v=83/84/3/-1;t=t_dictionary
	 */
	public static List chongZhengZhangTai(){
		String[] sval = "83,84,3,-1".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("83")
				+","+DictionaryCtrl.getServiceName("84")
				+","+DictionaryCtrl.getServiceName("3")
				+","+DictionaryCtrl.getServiceName("-1")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 单边状态	k=状态名称,v=95/96/111/-111;t=t_dictionary
	 */
	public static List danBianZhuangTai(){
		String[] sval = "95,111,-111".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("95")
				+","+DictionaryCtrl.getServiceName("111")
				+","+DictionaryCtrl.getServiceName("-111")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 业务状态(后)	k=状态名称,v=0/1/2/-1/-2/-7;t=t_dictionary
	 */
	public static List yeWuZhuangTai(){
		String[] sval = "0,1,2,-1,-2,-7".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("0")
				+","+DictionaryCtrl.getServiceName("1")
				+","+DictionaryCtrl.getServiceName("2")
				+","+DictionaryCtrl.getServiceName("-1")
				+","+DictionaryCtrl.getServiceName("-2")
				+","+DictionaryCtrl.getServiceName("-7")).split(",");// key
		return allList(sval,skey);
	}
	
	
	
	/**
	 * 短信类型	k=类型名称,v=165~167,t=t_dictionary
	 */
	public static List duanXinLeiXing(){
		String[] sval = "165,166,167".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("165")
				+","+DictionaryCtrl.getServiceName("166")
				+","+DictionaryCtrl.getServiceName("167")).split(",");// key
		return allList(sval,skey);
	}
	
	
	/**
	 * 开关状态	k=字典表,v=10/11;t=t_dictionary
	 */
	public static List kaiGuanZhuangTai(){
		String[] sval = "10,11".split(",");// value
		String[] skey = (DictionaryCtrl.getServiceName("10")
				+","+DictionaryCtrl.getServiceName("11")).split(",");// key
		return allList(sval,skey);
	}
	
	/**
	 * 获取本月之前三月
	 * @return
	 * @author  Invalid
	 * @date 2011-6-24 下午05:13:40
	 */
	public static List getThreeMonthBefore(){
		Calendar date = Calendar.getInstance();
		int[] months = new int[3];
		int[] years  = new int[3];
		
		for(int i=0; i < months.length;i++){
			date.add(Calendar.MONTH, -1);
			months[i] = date.get(Calendar.MONTH)+1;
			years[i]  = date.get(Calendar.YEAR);
		}
		
		String[] sval = {
							years[0]+"-"+(months[0] < 10 ? "0"+months[0] : months[0]),
							years[1]+"-"+(months[1] < 10 ? "0"+months[1] : months[1]),
							years[2]+"-"+(months[2] < 10 ? "0"+months[2] : months[2])
						};// value
		String[] skey = {MONTHC[months[0]-1],MONTHC[months[1]-1],MONTHC[months[2]-1]};// key
		return allList(sval,skey);
	}
	
	/**
	 * 面值类型	k=面值数值1~1000,v=1~1000
	 */
	public static List getMoneyType(){
		String[] moneyVal = "1,3,5,10,20,30,50,100,200,300,500,1000".split(",");// value
		String[] moneyKey = "1,3,5,10,20,30,50,100,200,300,500,1000".split(",");//key
		
		return allList(moneyVal,moneyKey);
	}
	
	/**
	 * 公用方法,返回下拉列表框结果
	 * @param sval
	 * @param skey
	 * @return
	 * @author sgdjava
	 * @date 2011-6-15 上午10:26:12
	 */
	public static List allList(String[] sval,String[] skey){
		List result = new ArrayList();
		for (int i = 0; i < sval.length; i++) {
			Map map = new HashMap();
			map.put("val", sval[i]);
			map.put("key", skey[i]);
			result.add(map);
		}
		return result;
	}
}

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 2.详细使用方法

 

--------------------------------------------------------------------------------------------------------------------------------------------------

3.自定义标签两个属性,需要注意

<required>yes</required><!-- 表示该属性,一定要使用 -->
<rtexprvalue>true</rtexprvalue><!-- 属性是否能用表达式 -->   即EL表达式是否可用

 

当在<attribute>标签里指定<rtexprvalue>true</rtexprvalue>时, 表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定,  example as follow:

<sql:query var="result" >
    select * from mytable order by nameid
</sql:query>
<%request.setAttribute("nameid", "2"); %>
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>
<myTag:cupSize cupSize="${nameid}" cupSizes="${result}"></myTag:cupSize>


当在<attribute>标签里指定<rtexprvalue>false</rtexprvalue>时, 表示该自定义标签的某属性的值只能直接指定,  example as follow:
<myTag:cupSize cupSize="1" cupSizes="${result}"></myTag:cupSize>

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

分享到:
评论

相关推荐

    java自定义分页标签

    - 在JSP页面中通过`&lt;%@ taglib %&gt;`指令引入标签库,并使用自定义标签。 5. **淘宝购物分页样式**: - 淘宝分页标签通常具有简洁、直观的特点,可能包括了当前页数、总页数、跳转框、左右箭头等元素。 - 可以模仿...

    极光推送JAVA服务端集成 jpush-api-java-client-master

    极光推送是面向移动应用开发者提供的一套消息推送服务,它可以帮助开发者轻松实现向Android、iOS以及Web端用户推送自定义消息或通知。在Java服务端集成这个SDK,可以方便地在服务器端调用极光推送的相关API,实现与...

    jpush-api-java-client-3.3.3.zip极光推送

    极光推送(JPush)是基于Java开发的一款高效、稳定的推送服务工具,广泛应用于移动应用开发者,以实现向Android和iOS设备实时推送消息。`jpush-api-java-client-3.3.3.zip`是一个包含极光推送Java客户端库的压缩包,...

    jpush-api-java-client-master.zip

    本压缩包“jpush-api-java-client-master.zip”包含了极光推送的Java SDK,为开发者提供了方便的API接口,使得应用能够实现消息推送、用户标签管理、设备统计等功能。以下是对这个SDK及其相关知识点的详细解释: 1....

    fckeditor-java-2.6-src

    要将FCKeditor集成到Java应用中,你需要了解如何在Servlet或JSP中嵌入编辑器,配置相应的路径,处理上传的文件,以及在服务器端接收和返回编辑内容。这通常涉及设置JavaScript变量,配置URL映射,以及处理HTTP请求...

    arcgis-runtime-sdk-java-guide-100.4.0

    - 可以自定义标签的字体、颜色和位置。 - **添加栅格数据:** - 加载和显示栅格数据,如卫星图像或航空照片。 - 支持多种格式,如 TIFF、JPEG、PNG 等。 - **显示 KML 内容:** - 导入和显示 KML 文件中的地理...

    Az-Java-exec

    在Java应用程序中,我们经常需要通过命令行参数来调整Java虚拟机(JVM)的行为,例如内存分配、垃圾回收策略等。在Azkaban中,我们可以通过配置Azkaban作业的属性来指定这些参数。例如,可以使用`-D`选项设置系统...

    push-java-demo

    使用这个SDK,开发者可以方便地在自己的Java应用程序中集成推送功能,无需关心底层通信细节。SDK提供了创建、管理推送任务,以及接收和处理推送反馈等能力。通过调用SDK中的方法,你可以设置推送目标(如指定设备、...

    java72-java-advance源代码.zip

    6. **异常处理**:高级的异常处理策略,如链式异常、自定义异常和finally块的合理使用。 7. **设计模式**:可能涵盖单例、工厂、观察者、装饰器、适配器等多种设计模式的实现。 8. **网络编程**:TCP/UDP套接字...

    java自定义注解\标签库\监听\junit简单测试

    Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在源代码中的任何元素(类、方法、变量等)上添加元数据。自定义注解可以被编译器或者运行时系统用来执行特定的任务,例如代码分析、性能监控、持久化...

    momo-code-sec-inspector-java-prod-193.20.1.jar

    标签中的"intellij-idea"和"java"明确了插件的应用平台和语言,而"jar"则表明了其以Java Archive (JAR) 文件的形式发布,这是Java平台上常见的可执行文件格式,方便在不同环境中部署和使用。"momo"可能是开发团队或...

    Java数据库连接池与简单自定义标签

    Java数据库连接池与简单自定义标签是两个在Web开发中至关重要的概念,它们极大地提高了应用程序的性能和可维护性。 首先,我们来深入理解“Java数据库连接池”。数据库连接池是一种管理数据库连接的技术,它允许...

    opentelemetry-java-instrumentation 源码阅读

    `opentelemetry-java-instrumentation` 支持插件化,开发者可以通过实现 SPI 接口为特定库或框架添加自定义的监控逻辑。源码中,我们可以研究如何编写这样的插件,以及它们如何被自动加载和执行。 9. **兼容性和...

    jsp自定义标签报错的问题

    当尝试在Java Project中处理自定义标签时,由于缺少必要的环境和依赖,会导致运行时错误。 异常`Java.lang.NoClassDefFoundError: JspException`是一个常见的运行时异常,它表明在类路径中找不到指定的类(在这个...

    最新jpush-api-java-client-master.zip

    在移动应用开发中,消息推送服务是不可或缺的一部分,它能够帮助开发者向用户实时发送通知或消息,提高用户的活跃度与粘性。极光推送(JPush)作为国内知名的推送服务提供商,提供了丰富的API接口供开发者使用。本文...

    java-web-tld.rar_java tld

    Java Web TLD(Tag Library Descriptor)是Java服务器页面(JSP)技术中一个重要的概念,它是用来定义自定义标签库的XML文件。在Java Web开发中,TLD文件扮演着元数据的角色,它包含了标签库中每个自定义标签的详细...

    java---swing自学例子(有50个例子)

    例如,可以设置系统默认的LookAndFeel或自定义的LookAndFeel,以使应用看起来更符合操作系统的风格或者具有独特的设计。 此外,Swing 提供了一些高级组件,如JTable用于显示和编辑表格数据,JTree用于展示树形结构...

    安卓天气日历时间选择倒计时相关-日历自定义标签.rar

    首先,自定义标签在日历应用中通常用于增强用户体验,让用户可以更方便地管理和识别不同的日程。例如,用户可能希望为工作、家庭活动或旅行等设置不同颜色或形状的标签。实现这一功能需要对Android的日历API有深入...

    Struts2分页-自定义标签-类似百度分页

    在这个场景中,我们提到的是使用自定义标签实现类似于百度分页的效果,这是一种常见的用户体验优化策略。百度的分页设计简洁明了,易于用户操作,因此在Web应用中广泛模仿。 首先,让我们了解一下Struts2框架。...

Global site tag (gtag.js) - Google Analytics