jstl三目运算:前台页面截取字符串

来源:互联网 发布:单元网络分线盒 编辑:程序博客网 时间:2024/06/11 18:39

jstl三目运算:前台页面截取字符串

 

摘要: 通常像标题之类的,如果后台输入过长,那么前台完整输出,必然在格式上造成多行,会显得很难看,当然如果事先对该行进行了
长度和高度的控制,加上了一句“overflow:hidden”,那又另当别论了。 截取的方式自然是通过 ...
      通常像标题之类的,如果后台输入过长,那么前台完整输出,必然在格式上造成多行,会显得很难看,当然如果事先对该行进行了
长度和高度的控制,加上了一句“overflow:hidden”,那又另当别论了。
       截取的方式自然是通过${fn:substring()}函数,那么做法如下:      
1<c:if test="${fn:length(article.title)>21"}>${fn:substring(article.title,0,21)}....</c:if>
2<c:if test="${fn:length(article.title)<=21"}>${article.title}</c:if>      这样写未尝不可,其实有一个更简单的输出方式,用到的方法就是三目运算法,代码如下:
1

${fn:length(article.title)>21 ? fn:substring(article.title,0,21) :

article.title}${fn:length(article.title)>21 ? '...' : ''}

       代码相比之下,简洁了很多。。
       ${fn:length()}这个标签很强大,因为它不止可以计算字符串的长度,还可以计算从后台传过来的list对象的长度,
一开始还真不知道,下午做项目时就碰到这个问题了,为此卡了一下。

       ${fn:substring()}这个标签,我觉得他对于中英文字符串的处理不是太好,它将汉字和英文字符都当成是1个字节,

在截取的时候,有时候得到的效果往往不是我们想的,为此最好的解决方法是自己写个标签,当然如果后台输出的都是汉字,

那么干脆用这个标签来截取,也很方便的。

       中英文截取字符串标签的java代码如下,这是我从javaeye上拷贝过来的,在实际的项目中通过。

01package com.test.mytag;
02  
03import java.io.IOException;
04  
05import javax.servlet.jsp.JspException;
06import javax.servlet.jsp.tagext.TagSupport;
07  
08import org.apache.log4j.Logger;
09  
10/**
11 * 截断字符串并以制定符号替代的tag
12 
13 * @author ryankay.xiang@gmail.com
14 
15 */
16public class CutStringTag extends TagSupport {
17    /**
18     
19     */
20    private static final long serialVersionUID = 1L;
21  
22    /**
23     * Logger for this class
24     */
25    private static final Logger logger = Logger.getLogger(CutStringTag.class);
26  
27    String value;
28    String mark="";
29    Integer size;
30  
31    @Override
32    public int doStartTag() throws JspException {
33        return SKIP_BODY;
34    }
35  
36    @Override
37    public int doEndTag() throws JspException {
38        String html = cutString(value, size,mark);
39        try {
40            this.pageContext.getOut().write(html.toString());
41        } catch (IOException e) {
42            logger.error("tag CutStringTag error", e);
43        }
44        return EVAL_PAGE;
45    }
46  
47    public String cutString(String str, int len,String mark) {
48        len = len * 2;
49        StringBuffer sb = new StringBuffer();
50        int counter = 0;
51        for (int i = 0; i < str.length(); i++) {
52            char c = str.charAt(i);
53            if (c < 255) {
54                counter++;
55            } else {
56                counter = counter + 2;
57            }
58            if (counter > len) {
59                String result=sb.toString().trim();
60                result+=mark;
61                return result;
62            }
63            sb.append(c);
64        }
65        return sb.toString();
66    }
67  
68    public String getValue() {
69        return value;
70    }
71  
72    public void setValue(String value) {
73        this.value = value;
74    }
75  
76    public String getMark() {
77        return mark;
78    }
79  
80    public void setMark(String mark) {
81        this.mark = mark;
82    }
83  
84    public Integer getSize() {
85        return size;
86    }
87  
88    public void setSize(Integer size) {
89        this.size = size;
90    }
91}

标签的tld文件代码如下: 

<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>site</short-name><uri>http://www.collin.cn/taglib/site</uri><display-name>Collin Site</display-name><description></description><tag><name>cutString</name><tag-class>com.test.mytag.CutStringTag</tag-class><body-content>empty</body-content><description>Used to cut a string with your parameter.</description><attribute>      <name>value</name>      <required>true</required>                      <rtexprvalue>true</rtexprvalue>      <description>Required to set the string what you want to cut.</description></attribute><attribute>       <name>size</name>       <required>true</required>       <rtexprvalue>true</rtexprvalue>       <description>Required to set the size or length and it compute as chinese.</description></attribute><attribute>       <name>mark</name>       <required>false</required>       <rtexprvalue>true</rtexprvalue>       <description>Write something append to the string or you can use the default ''.</description></attribute></tag></taglib>
原文出处:http://www.189works.com/article-7120-1.html
原创粉丝点击