您的位置:首页 > Web前端 > JavaScript

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

2010-12-24 10:15 639 查看

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

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
08
import
org.apache.log4j.Logger;
09
10
/**
11
*截断字符串并以制定符号替代的tag
12
*
13
*@authorryankay.xiang@gmail.com
14
*
15
*/
16
public
class
CutStringTag
extends
TagSupport{
17
/**
18
*
19
*/
20
private
static
final
long
serialVersionUID=1L;
21
22
/**
23
*Loggerforthisclass
24
*/
25
private
static
final
Loggerlogger=Logger.getLogger(CutStringTag.
class
);
26
27
Stringvalue;
28
Stringmark=
""
;
29
Integersize;
30
31
@Override
32
public
int
doStartTag()
throws
JspException{
33
return
SKIP_BODY;
34
}
35
36
@Override
37
public
int
doEndTag()
throws
JspException{
38
Stringhtml=cutString(value,size,mark);
39
try
{
40
this
.pageContext.getOut().write(html.toString());
41
}
catch
(IOExceptione){
42
logger.error(
"tagCutStringTagerror"
,e);
43
}
44
return
EVAL_PAGE;
45
}
46
47
public
StringcutString(Stringstr,
int
len,Stringmark){
48
len=len*
2
;
49
StringBuffersb=
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
Stringresult=sb.toString().trim();
60
result+=mark;
61
return
result;
62
}
63
sb.append(c);
64
}
65
return
sb.toString();
66
}
67
68
public
StringgetValue(){
69
return
value;
70
}
71
72
public
void
setValue(Stringvalue){
73
this
.value=value;
74
}
75
76
public
StringgetMark(){
77
return
mark;
78
}
79
80
public
void
setMark(Stringmark){
81
this
.mark=mark;
82
}
83
84
public
IntegergetSize(){
85
return
size;
86
}
87
88
public
void
setSize(Integersize){
89
this
.size=size;
90
}
91
}
标签的tld文件代码如下:

<?xmlversion="1.0"encoding="iso-8859-1"?>
<!DOCTYPEtaglib
PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.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>CollinSite</display-name>
<description></description>

<tag>
<name>cutString</name>
<tag-class>com.test.mytag.CutStringTag</tag-class>
<body-content>empty</body-content>
<description>Usedtocutastringwithyourparameter.</description>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>Requiredtosetthestringwhatyouwanttocut.</description>
</attribute>
<attribute>
<name>size</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>Requiredtosetthesizeorlengthanditcomputeaschinese.</description>
</attribute>
<attribute>
<name>mark</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>Writesomethingappendtothestringoryoucanusethedefault''.</description>
</attribute>
</tag>
</taglib>

原文出处:http://www.189works.com/article-7120-1.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: