今天做到在jsp 页面中显示数据的时候,由于数据比较多,一下子表格就拉开了 ,变形了。想到以前在ASP.NET中做过,但那完全不一样,那里直接可能调用后台代码,而在jsp页面中呢?我也试了一下,但是又不能次页面中的数据传进去也是不行。<%= Util.cutString("${user.name}",10)%>,没想到这样也没用,只是一个字符串死的。
解决方法 ,我想到了 jstl 标签中的 fn 标签,但找了一下,都用不上,没有自己想用的方法。我想自己可不可以加个方法进去呢?就找 jstl 的源码。和打成的JAR 文件,看了一下 有关fn 标签的实现,没想到只有一个Functions 类型里面有一些静态的方法修改一下配置文件就Ok了。这是加了以后Functions 类的代码:
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* glassfish/bootstrap/legal/CDDLv1.0.txt or
* https://glassfish.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
*
* Portions Copyright Apache Software Foundation.
*/
package org.apache.taglibs.standard.functions;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.jsp.JspTagException;
import org.apache.taglibs.standard.resources.Resources;
import org.apache.taglibs.standard.tag.common.core.Util;
/**
* <p>JSTL Functions</p>
*
* @author Pierre Delisle
*/
public class Functions {
//*********************************************************************
// String capitalization
/**
* Converts all of the characters of the input string to upper case.
*/
public static String toUpperCase(String input) {
return input.toUpperCase();
}
/**
* Converts all of the characters of the input string to lower case.
*/
public static String toLowerCase(String input) {
return input.toLowerCase();
}
//*********************************************************************
// Substring processing
public static int indexOf(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
return input.indexOf(substring);
}
public static boolean contains(String input, String substring) {
return indexOf(input, substring) != -1;
}
public static boolean containsIgnoreCase(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
String inputUC = input.toUpperCase();
String substringUC = substring.toUpperCase();
return indexOf(inputUC, substringUC) != -1;
}
public static boolean startsWith(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
return input.startsWith(substring);
}
public static boolean endsWith(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
int index = input.indexOf(substring);
if (index == -1) return false;
if (index == 0 && substring.length() == 0) return true;
return (index == input.length() - substring.length());
}
public static String substring(String input, int beginIndex, int endIndex) {
if (input == null) input = "";
if (beginIndex >= input.length()) return "";
if (beginIndex < 0) beginIndex = 0;
if (endIndex < 0 || endIndex > input.length()) endIndex = input.length();
if (endIndex < beginIndex) return "";
return input.substring(beginIndex, endIndex);
}
public static String substringAfter(String input, String substring) {
if (input == null) input = "";
if (input.length() == 0) return "";
if (substring == null) substring = "";
if (substring.length() == 0) return input;
int index = input.indexOf(substring);
if (index == -1) {
return "";
} else {
return input.substring(index+substring.length());
}
}
public static String substringBefore(String input, String substring) {
if (input == null) input = "";
if (input.length() == 0) return "";
if (substring == null) substring = "";
if (substring.length() == 0) return "";
int index = input.indexOf(substring);
if (index == -1) {
return "";
} else {
return input.substring(0, index);
}
}
//*********************************************************************
// Character replacement
public static String escapeXml(String input) {
if (input == null) return "";
return Util.escapeXml(input);
}
public static String trim(String input) {
if (input == null) return "";
return input.trim();
}
public static String replace(
String input,
String substringBefore,
String substringAfter)
{
if (input == null) input = "";
if (input.length() == 0) return "";
if (substringBefore == null) substringBefore = "";
if (substringBefore.length() == 0) return input;
StringBuffer buf = new StringBuffer(input.length());
int startIndex = 0;
int index;
while ((index = input.indexOf(substringBefore, startIndex)) != -1) {
buf.append(input.substring(startIndex, index)).append(substringAfter);
startIndex = index + substringBefore.length();
}
return buf.append(input.substring(startIndex)).toString();
}
public static String[] split(
String input,
String delimiters)
{
String[] array;
if (input == null) input = "";
if (input.length() == 0) {
array = new String[1];
array[0] = "";
return array;
}
if (delimiters == null) delimiters = "";
StringTokenizer tok = new StringTokenizer(input, delimiters);
int count = tok.countTokens();
array = new String[count];
int i = 0;
while (tok.hasMoreTokens()) {
array[i++] = tok.nextToken();
}
return array;
}
//*********************************************************************
// Collections processing
public static int length(Object obj) throws JspTagException {
if (obj == null) return 0;
if (obj instanceof String) return ((String)obj).length();
if (obj instanceof Collection) return ((Collection)obj).size();
if (obj instanceof Map) return ((Map)obj).size();
int count = 0;
if (obj instanceof Iterator) {
Iterator iter = (Iterator)obj;
count = 0;
while (iter.hasNext()) {
count++;
iter.next();
}
return count;
}
if (obj instanceof Enumeration) {
Enumeration enum_ = (Enumeration)obj;
count = 0;
while (enum_.hasMoreElements()) {
count++;
enum_.nextElement();
}
return count;
}
try {
count = Array.getLength(obj);
return count;
} catch (IllegalArgumentException ex) {}
throw new JspTagException(Resources.getMessage("FOREACH_BAD_ITEMS"));
}
public static String join(String[] array, String separator) {
if (array == null) return "";
if (separator == null) separator = "";
StringBuffer buf = new StringBuffer();
for (int i=0; i<array.length; i++) {
buf.append(array[i]);
if (i < array.length-1) buf.append(separator);
}
return buf.toString();
}
public static String cutString(String input,int length){
if (input.length()<=length) {
return input;
}else{
return input.substring(0,length)+"...";
}
}
}
最后一段是自己加的方法。
和在fn.tld 中增加了
<function>
<description>
Returns a subset of a string.
</description>
<name>cutString</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String cutString(java.lang.String, int)</function-signature>
<example>
P.O. Box: ${fn:cutstring(zip, 6)}
</example>
</function>
在把编译后的Functions.class 文件去替换 jstl1.2.jar解压后的相应位置的Functions.class 和 fn.tld 文件 再做成Jar包就可以用了(做成Jar包的方法,按解压出来的目录不变,替换以后,打个zip 包,修改后缀为jar 就可以了这种方法比较方便)
在页面中使用就是
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
${fn:cutString(product.enDesc ,15) }
这里也提供做好了的jstl1.2.jar文件,不用自己再去改了
分享到:
相关推荐
3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`<jsp:taglib>`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`<myTag:myTag attribute1="value1" attribute2="value2">`。 在给定...
4. **在JSP页面中使用标签**:通过`<%@ taglib %>`指令引入标签库,并使用`<prefix>`指定前缀。然后,就可以像使用任何其他JSP内置标签一样使用自定义嵌套标签了。 #### 三、自定义嵌套标签的应用实例 在给定的...
使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...
在JavaServer Pages (JSP) 开发中,为了提高代码的可维护性和重用性,开发者经常使用自定义标签库。本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览...
`userlist.jsp` 是使用自定义标签展示数据列表的页面,它通过`<taglib>`指令引用自定义标签库,并在页面中使用自定义标签`<user:displayList>`来展示用户列表。在`<user:displayList>`标签中,可以传递参数,如数据...
在JSP页面中,通过`指令`引入自定义标签库,并使用`属性...</tag-name>`的格式调用自定义标签。 **二、自定义标签函数** 自定义标签函数是在JSP 2.0中引入的一种新的特性,它允许开发者像使用EL(Expression ...
3. **在JSP页面中使用**:在JSP页面中,通过`<%@ taglib %>`指令引入自定义标签库,然后就可以像使用内置标签一样使用自定义标签了。 二、分页封装 分页是网页应用中常见的需求,通过自定义标签可以方便地实现。...
3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`<%@ taglib %>`指令引入TLD文件,然后就可以像使用标准JSP标签一样使用自定义标签了: ```jsp ``` 自定义JSP标签实现无刷新功能,主要是通过AJAX技术。当...
4. **使用自定义标签**:在JSP页面中,通过`<%@ taglib %>`指令引入标签库,然后像使用内置标签一样使用自定义标签。标签的属性可以通过标签的属性值传递到Tag Handler类中。 5. **处理业务逻辑**:在Tag Handler类...
自定义标签是JSP的一种扩展,它允许开发者定义自己的标签库,实现特定的功能,这些标签可以在多个JSP页面中重复使用,提高代码复用率。 2.2 标签相关概念 自定义标签通常由三部分组成:标签处理类、TLD(Tag ...
jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签
为了能够在JSP页面中使用自定义标签,还需要配置TLD(Tag Library Descriptor)文件。TLD文件定义了标签库的行为,包括标签的名称、属性以及功能描述等。 例如,在`myTag.tld`文件中配置迭代标签的信息: ```xml ...
想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用...
4. **在JSP页面中使用标签**:在JSP页面中,我们可以通过`<%@ taglib %>`指令引入自定义标签库,并使用`<myTableTag:table>`这样的语法来调用自定义的表格标签。 在"JSP自定义Table标签demo"中,我们可能期望看到...
在JavaServer Pages (JSP) 技术中,自定义标签是实现页面逻辑和视图分离的一种重要方式,它允许开发者创建可重用的组件,提高代码的可维护性和复用性。本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP...
在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能和实现可重用组件的重要方式。自定义标签允许开发者创建自己的标签库,这些标签可以像HTML标签一样在JSP页面中使用,但它们可以执行更复杂的业务逻辑或...
自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理类(Tag Handler Class)以及实际的JSP页面中的标签使用。 1. **标签库描述符(TLD)**: TLD是一个XML文件,它定义了自定义标签的元数据,...
在这个文件中,你需要指定标签的名字、对应的Java类、属性以及它们的配置。 2. **TLD文件配置详解** - `<uri>`:定义标签库的唯一URI,与JSP页面中引用标签库时使用的URI对应。 - `<name>`:自定义标签的名称,...
2. **配置web.xml**:在`web.xml`中添加自定义标签库的配置,指定标签库的URI和TLD文件位置。 3. **编写TLD文件**:创建TLD文件,定义自定义标签的相关信息,包括标签名、处理类、属性等。 4. **编写标签处理程序类*...