日期:2014-05-16  浏览次数:20458 次

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上拷贝过来的,在实际的项目中通过。

?

01 package com.test.mytag;
02 ??
03 import java.io.IOException;
04 ??
05 import javax.servlet.jsp.JspException;
06 import javax.servlet.jsp.tagext.TagSupport;
07