首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

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

2012-10-27 
jstl三目运算:前台页面截取字符串???通常像标题之类的,如果后台输入过长,那么前台完整输出,必然在格式上造

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

???通常像标题之类的,如果后台输入过长,那么前台完整输出,必然在格式上造成多行,会显得很难看,当然如果事先对该行进行了长度和高度的控制,加上了一句“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????@Override32????public int doStartTag() throws JspException { 33????????return SKIP_BODY; 34????} 35??36????@Override37????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}

?

?

JS的控制如下:

  1. function cutstr(str,len) { var str_length = 0; var str_len = 0; str_cut = new String(); str_len = str.length; for(var i = 0;i<str_len;i++) { a = str.charAt(i); str_length++; if(escape(a).length > 4) { ?? str_length++; } str_cut = str_cut.concat(a); if(str_length>=len) { ?? str_cut = str_cut.concat("..."); ?? return str_cut; } } }

热点排行