1. 程式人生 > >Java 自定義tld標籤庫

Java 自定義tld標籤庫

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	...
	<!-- zip resources -->
	<filter>
		<filter-name>GZIPFilter</filter-name>
		<filter-class>com.tacitknowledge.filters.gzipfilter.GZIPFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>GZIPFilter</filter-name>
		<url-pattern>*.js</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>GZIPFilter</filter-name>
		<url-pattern>*.css</url-pattern>
	</filter-mapping>
	<!-- self defi tag  -->
	<jsp-config>
		<taglib>
			<taglib-uri>http://www.xxx.com.cn/project/functions</taglib-uri>
			<taglib-location>/WEB-INF/tld/xxx-html.tld</taglib-location>
		</taglib>
	</jsp-config>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<error-page>
		<error-code>500</error-code>
		<location>/pages/error.jsp</location>
	</error-page>
	<error-page>
		<error-code>503</error-code>
		<location>/pages/error.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/pages/error.jsp</location>
	</error-page>
	...
</web-app>

在WEB-INF下面新建tld目錄

新增

xxx-html.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
>
<tlib-version>1.0</tlib-version>
<short-name>wapHtml</short-name>
<uri>http://www.xxx.com.cn/project/functions</uri>
	<function>
	   <name>
	        replaceSpecialChar
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String replaceSpecialChar(java.lang.String,java.lang.String,java.lang.String)</function-signature>
	</function>
	<function>
	   <name>
	        splitChar
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String[] splitChar(java.lang.String,java.lang.String)</function-signature>
	</function>
	<function>
	   <name>
	        cutStr
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String cutStr(java.lang.String,java.lang.Integer)</function-signature>
	</function>
	<function>
	   <name>
	        cutStrExt
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String cutStrExt(java.lang.String,java.lang.Integer,java.lang.Integer,java.lang.String)</function-signature>
	</function>
	<function>
	   <name>
	        convertNumber
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String convertNumber(java.lang.String)</function-signature>
	</function>
		<function>
	   <name>
	        dateToStr
	   </name>
	   <function-class>com.paic.mall.util.tag.WapHtmlTag</function-class>
	   <function-signature>java.lang.String dateToStr(java.util.Date,java.lang.String)</function-signature>
	</function>
	
</taglib>

WapHtmlTag.java
public class WapHtmlTag {
	
	/**
	 * 把sourceStr含有repChar的字元替換為destChar
	 * @param sourceStr
	 * @param oldChar
	 * @param newChar
	 * @return
	 */
	public static String replaceSpecialChar(String sourceStr, String oldChar, String newChar){
		if(StringUtils.isEmpty(sourceStr)){
			return "";
		}
		sourceStr = sourceStr.toLowerCase();
		sourceStr = sourceStr.replace(oldChar, newChar);
		return sourceStr;
	}


	/**
	 * 分割字串,至少保持陣列長度有兩位
	 * @param sourceStr
	 * @param split
	 * @return
	 */
	public static String[] splitChar(String sourceStr, String split){
		if(StringUtils.isEmpty(sourceStr)){
			return new String[2];
		}
		String[] array = sourceStr.split(split);
		if(null != array && array.length > 0){
			if(array.length == 1){
				String[] ay = new String[2];
				ay[0] = array[0];
				return ay;
			}
			return array;
		}
		return new String[2];
	}


	/**
	 * 擷取字串,如果不超過length,則返回原來字串
	 * @param sourceStr
	 * @param length
	 * @return
	 */
	public static String cutStr(String sourceStr, Integer length){
		if(StringUtils.isEmpty(sourceStr)){
			return "";
		}
		int sourceLength = sourceStr.length();
		if(sourceLength > length){
			sourceStr = sourceStr.substring(0, length) + "...";
		}
		return sourceStr;
	}


	/**
	 * 擷取字串,如果不超過length,則返回原來字串
	 * @param sourceStr 原串
	 * @param startIndex 開始位置
	 * @param endIndex 結束位置
	 * @param subffix 字尾
	 * @return
	 */
	public static String cutStrExt(String sourceStr, Integer startIndex, Integer endIndex, String subffix){
		if(StringUtils.isEmpty(sourceStr)){
			return "";
		}
		int sourceLength = sourceStr.length();
		if(sourceLength <= startIndex){
			return sourceStr;
		}
		int end = sourceLength - startIndex;
		if(end > endIndex){
			sourceStr = sourceStr.substring(startIndex, endIndex) + subffix;
		}else{
			sourceStr = sourceStr.substring(startIndex, sourceLength) + subffix;			
		}
		return sourceStr;
	}


	/**
	 * 數字轉換
	 * @param number 數字
	 * @return
	 */
	public static String convertNumber(String numberStr){
		if(StringUtils.isEmpty(numberStr)){
			return "";
		}
		if(!StringUtils.isNumeric(numberStr)){
			return "";
		}
		double number = Double.parseDouble(numberStr);
		String str = "";
		DecimalFormat df = new DecimalFormat("######0.00");
		if(number >= 10000){
			str = String.valueOf(df.format(Double.valueOf(number)/10000));//轉化為萬,儲存兩位小數
			String strLeft = str.substring(0, str.indexOf("."));//小數點左邊
			String strRight = str.substring(str.indexOf(".")+1, str.length());//小數點右邊
			int minERight = Integer.parseInt(strRight);
			if(minERight <= 0){//判斷右邊小於0,則去掉右邊的兩位小數
				str = strLeft;
			}
			return str;
		}else{
			return numberStr;
		}
	}
	
	 /**
	  * 把時間型別轉化為String型別
	 * @param date
	 * @return
	 */
	public static String dateToStr(Date date,String partn){
		if(null == date){
			return "";
		}
		  SimpleDateFormat sdf=new SimpleDateFormat(partn);  
		  String str=sdf.format(date);
		return str; 
	  }


}

使用方法

xxx.jsp

<strong style="font-style: italic;"><</strong>%@ taglib prefix="waptag" uri="http://www.pingan.com.cn/jrqjd/functions" %>
<c:if test="${not empty lujinsuoList}">
					<div class="content-block-title">陸金所理財產品(<i>${fn:length(lujinsuoList)}</i>)</div>
					<div class="list-block">
				      	<ul>
					        <c:forEach items="${lujinsuoList}" var="record" varStatus="item">
						        <li class="swipeout">
							        <label class="swipeout-content item-content label-checkbox">
										<input type="checkbox" name="shop-cart-checkbox" class="shop-cart-checkbox" value="${record.idWapShoppingCart }">
										<div class="item-media"><i class="icon icon-form-checkbox"></i></div>
						        		<div class="ub-f1 ubox-v product-info">
						        			<a class="link title-name" href="${waptag:splitChar(record.productUrl, 'mamc/')[1] }">${record.productName }</a>
						        			<div class="title-number">${record.productCode }</div>
						        			<div class="ubox title-value">
						        				<span class="ub-f1">${waptag:replaceSpecialChar(record.productUniqueFeature, '%','<i>%</i>')}</span>
						        				<span class="ub-f1">${waptag:splitChar(record.productIntroduce, '萬')[0]}<i>萬</i></span>
							        			<span class="ub-f1">${waptag:splitChar(record.productIntroduce, '萬')[1]}</span>
						        			</div>
						        			<div class="ubox">
						        				<div class="ub-f1">預期收益</div>
						        				<div class="ub-f1">起購價</div>
						        				<div class="ub-f1">起購期限</div>
						        			</div>
						        		</div>
						        		<div class="ubox-v buy-info">
						        			<a href="${ctx}/lujinsuo/yuyue/tianxie.do?${sessionScope.wapChaoshiUrlParams }&pid=${record.productId }" class="external ub-f1 ubox text-1 ub-ac">預約</a>
						        		</div>
					        		</label>
					        		<div class="swipeout-actions-right">
								        <a href="#" class="swipeout-delete bg-red">刪除</a>
								    </div>
						        </li>
					        </c:forEach>
				      	</ul>
				    </div>
				    </c:if>


相關推薦

Java 定義tld標籤

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jav

使用tld檔案定義jsp標籤

目錄 一,標籤庫描述檔案(tld檔案) 二,標籤處理類 三,在JSP頁面中使用自定義的標籤 四,舉個例子 通過Java的TagSupport類或者BodyTagSupport類,和配套的tld檔案,可以定義自己的jsp標籤。 TagSupport類和BodyTagSu

Java 定義JDBC類

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql

java定義標籤的開發

1. 建立實現了Tag介面(準確地說是 javax.servlet.jsp.tagext.Tag)的標籤處理程式類。 2. 建立一個 TLD 檔案。  3. 在標籤處理程式 Java 類中建立屬性。  4. 在 TLD 檔案中定義與標籤處理程式 Java 類中定義的屬性對應的屬性。  5. 在 TLD 檔案中

java 定義標籤 許可權標籤 模仿shiro

二話不說,直接開幹。 新建 permission.tld 內容如下 <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee"

java netty socket定義C#socket利用protobuf進行通訊完整例項

之前的文章講述了socket通訊的一些基本知識,已經本人自定義的C#版本的socket、和java netty 庫的二次封裝,但是沒有真正的發表測試用例。 本文只是為了講解利用protobuf 進行C# 和 java的通訊。以及完整的例項程式碼 java 程式碼 svn 地址,本人開發工具是NetBean

springboot 定義許可權標籤(tld),在freemarker引用

第一步:引入jar包 <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>

java定義標籤異常

嚴重: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: /WEB-INF/pages/svg/doc-svg/index.jsp(198,5) According to TL

[Java]定義Jar,Http簡單的Get和Post請求封裝

最近寫Android程式頻繁用到Http的Get和Post、請求,每次寫一個專案都要重新URL --> URLConnection實在是太麻煩,乾脆,自己封裝了一個。 分別處理Get和Post簡

Java定義異常

trace tex logs fin rate cat java自定義異常 leg pan package cn.Douzi.Lab7_4; public class Triangle { int a, b, c; publ

Java定義註解反射校驗數據

sda new out 格式 是否 本地 imp 使用範圍 數據類型 package com.annotations.ecargo; import java.lang.annotation.ElementType; import java.lang.annotati

[轉][Java]定義標簽簡介

是否 沒有 override include file sch lang oca uri 作用:自定義標簽主要用於移除 jsp 頁面中的 java 代碼。 實現:需要完成以下兩個步驟: 編寫一個實現 Tag 接口的 Java 類,把頁面 java 代碼移到這個 java

java定義註解

不包含 doc 1.2 color 子類 局部變量 ati 包含 ant Java註解是附加在代碼中的一些元信息,用於一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能。註解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。包含在 java.lang.annot

Java定義方法轉換前端提交的json字符串為JsonObject對象

eid test 提交 rac quest https std bject app 前端提交json字符串格式數據,Java後端通過自定義方法接收json字符串數據並轉換為JsonObject對象,代碼如下放到RequestData.Java類中: public stat

VS2017 Linux C++引用定義的動態

++ -1 undefined mage 編譯運行 linux下 lin 套路 log 前一篇博客講了用系統庫libpthread.so的例子,只需要在項目屬性頁的[C++->命令行參數]和[鏈接器->命令行參數]中加上對應參數(比如-pthread)即可,然後

Java定義類加載和ClassPath類加載器

訪問 pub 需要 委派 iat 定義 pro logs repl 1 自定義類加載器: 實現規則: 自定義類加載器,需要重寫findClass,然後通過調用loadClass進行類加載(loadClass通過遞歸實現類的雙親委派加載) package com.daxin

定義數據連接工具類

數據庫 工具類 這是一個代碼質量比較高的Util。這裏寫了兩種,一種是原始的,一種是使用C3P0的。數據庫使用的是MySQL5.7。使用框架開發的時候根本不需要寫這些東西。其實框架也是這樣封裝的,但提供的功能會很豐富。這裏展現的是思路,供參考。功能齊全的Dao工具類DriverManager獲取連接的

ci框架定義數據查詢名稱(方法)

cti 子目錄 ons pos 傳遞 sele 傳遞參數 ren 基礎 適合剛接觸PHP和ci框架的人,本人也是小白 原因:官方給的數據庫查詢方法可能不利於記憶使用,官方給的一些方法只能進行基礎查詢,每次復合查詢都需要拼接條件,自己定義定義方法直接調用方法即可 操作步驟:

java 定義log類

comm deb null == bug void err getenv log4 目錄機構如下: package tpf.common; import org.apache.log4j.*; import java.io.File;

java定義泛型 面試題:接收任意數組進行反轉

static class ava div 叠代器 類型 應用 system length 不用泛型只能操作某種類型進行反轉 代碼如下: package com.swift.fanxing; import org.junit.Test; public class Ren