`
zengxx1989
  • 浏览: 300301 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

jsp中通过自定义fn标签实现指定长度字符,多余的用……表示

阅读更多
    今天做到在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文件,不用自己再去改了
1
0
分享到:
评论
2 楼 jmu 2009-08-16  
contains  判断字符串是否包含另外一个字符串  <c:if test="${fn:contains(name, searchString)}">
containsIgnoreCase 判断字符串是否包含另外一个字符串(大小写无关) <c:if test="${fn:containsIgnoreCase(name, searchString)}">
endsWith 判断字符串是否以另外字符串结束 <c:if test="${fn:endsWith(filename, ".txt")}">
escapeXml 把一些字符转成XML表示,例如<字符应该转为&lt; ${fn:escapeXml(param:info)}
indexOf 子字符串在母字符串中出现的位置 ${fn:indexOf(name, "-")}
join 将数组中的数据联合成一个新字符串,并使用指定字符格开 ${fn:join(array, ";")}
length 获取字符串的长度,或者数组的大小 ${fn:length(shoppingCart.products)}
replace 替换字符串中指定的字符 ${fn:replace(text, "-", "&#149;")}
split 把字符串按照指定字符切分 ${fn:split(customerNames, ";")}
startsWith 判断字符串是否以某个子串开始 <c:if test="${fn:startsWith(product.id, "100-")}">
substring 获取子串 ${fn:substring(zip, 6, -1)}
substringAfter

获取从某个字符所在位置开始的子串
${fn:substringAfter(zip, "-")}
substringBefore 获取从开始到某个字符所在位置的子串 ${fn:substringBefore(zip, "-")}
toLowerCase 转为小写 ${fn.toLowerCase(product.name)}
toUpperCase 转为大写字符 ${fn.UpperCase(product.name)}
trim 去除字符串前后的空格 ${fn.trim(name)}
1 楼 myyate 2009-08-16  
我晕,这个完全可以用css来控制的,何必这么麻烦?
text-overflow:ellipsis;
overflow:hidden;
width:100px;

相关推荐

    jsp 自定义标签实例

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;jsp:taglib&gt;`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`&lt;myTag:myTag attribute1="value1" attribute2="value2"&gt;`。 在给定...

    jsp自定义嵌套标签

    4. **在JSP页面中使用标签**:通过`&lt;%@ taglib %&gt;`指令引入标签库,并使用`&lt;prefix&gt;`指定前缀。然后,就可以像使用任何其他JSP内置标签一样使用自定义嵌套标签了。 #### 三、自定义嵌套标签的应用实例 在给定的...

    jsp权限控制,jsp自定义标签实现

    使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...

    jsp自定义分页标签

    在JavaServer Pages (JSP) 开发中,为了提高代码的可维护性和重用性,开发者经常使用自定义标签库。本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览...

    jsp自定义标签库实现数据列表显示

    `userlist.jsp` 是使用自定义标签展示数据列表的页面,它通过`&lt;taglib&gt;`指令引用自定义标签库,并在页面中使用自定义标签`&lt;user:displayList&gt;`来展示用户列表。在`&lt;user:displayList&gt;`标签中,可以传递参数,如数据...

    jsp2.0 自定义标签和自定标签函数

    在JSP页面中,通过`指令`引入自定义标签库,并使用`属性...&lt;/tag-name&gt;`的格式调用自定义标签。 **二、自定义标签函数** 自定义标签函数是在JSP 2.0中引入的一种新的特性,它允许开发者像使用EL(Expression ...

    jsp 自定义标签的使用

    3. **在JSP页面中使用**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,然后就可以像使用内置标签一样使用自定义标签了。 二、分页封装 分页是网页应用中常见的需求,通过自定义标签可以方便地实现。...

    自定义JSP标签,用于实现无刷新的方法之一

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入TLD文件,然后就可以像使用标准JSP标签一样使用自定义标签了: ```jsp ``` 自定义JSP标签实现无刷新功能,主要是通过AJAX技术。当...

    jsp页面自定义标签的实现

    4. **使用自定义标签**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入标签库,然后像使用内置标签一样使用自定义标签。标签的属性可以通过标签的属性值传递到Tag Handler类中。 5. **处理业务逻辑**:在Tag Handler类...

    JSP自定义标签学习笔记

    自定义标签是JSP的一种扩展,它允许开发者定义自己的标签库,实现特定的功能,这些标签可以在多个JSP页面中重复使用,提高代码复用率。 2.2 标签相关概念 自定义标签通常由三部分组成:标签处理类、TLD(Tag ...

    jsp自定义标签 jsp自定义标签

    jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签

    jsp自定义迭代标签

    为了能够在JSP页面中使用自定义标签,还需要配置TLD(Tag Library Descriptor)文件。TLD文件定义了标签库的行为,包括标签的名称、属性以及功能描述等。 例如,在`myTag.tld`文件中配置迭代标签的信息: ```xml ...

    掌握自定义JSP标签

    想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用...

    JSP自定义Table标签demo

    4. **在JSP页面中使用标签**:在JSP页面中,我们可以通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,并使用`&lt;myTableTag:table&gt;`这样的语法来调用自定义的表格标签。 在"JSP自定义Table标签demo"中,我们可能期望看到...

    JSP自定义标签实例与详细讲解

    在JavaServer Pages (JSP) 技术中,自定义标签是实现页面逻辑和视图分离的一种重要方式,它允许开发者创建可重用的组件,提高代码的可维护性和复用性。本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP...

    自定义JSP标签样例

    在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能和实现可重用组件的重要方式。自定义标签允许开发者创建自己的标签库,这些标签可以像HTML标签一样在JSP页面中使用,但它们可以执行更复杂的业务逻辑或...

    JSP自定义标签之自动完成框

    自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理类(Tag Handler Class)以及实际的JSP页面中的标签使用。 1. **标签库描述符(TLD)**: TLD是一个XML文件,它定义了自定义标签的元数据,...

    jsp自定义标签库注意事项

    在这个文件中,你需要指定标签的名字、对应的Java类、属性以及它们的配置。 2. **TLD文件配置详解** - `&lt;uri&gt;`:定义标签库的唯一URI,与JSP页面中引用标签库时使用的URI对应。 - `&lt;name&gt;`:自定义标签的名称,...

    JSP自定义标签:最近在项目中要用到这种技术,所以自己就写一个经典的HelloWorld实例

    2. **配置web.xml**:在`web.xml`中添加自定义标签库的配置,指定标签库的URI和TLD文件位置。 3. **编写TLD文件**:创建TLD文件,定义自定义标签的相关信息,包括标签名、处理类、属性等。 4. **编写标签处理程序类*...

Global site tag (gtag.js) - Google Analytics