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上拷贝过来的,在实际的项目中通过。
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
* @author ryankay.xiang@gmail.com
14
*
15
*/
16
public
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
- jstl三目运算:前台页面截取字符串
- jstl三目运算:前台页面截取字符串
- 使用JSTL截取字符串,并输出到页面
- 用jstl截取字符串
- 用jstl截取字符串
- jstl 截取字符串
- 用jstl截取字符串
- 用jstl截取字符串
- 用jstl截取字符串
- jstl截取字符串
- 使用jstl截取字符串
- 用jstl截取字符串
- jstl截取字符串
- jstl 表达式 截取字符串
- 图像截取的前台页面
- JSTL,STRUCT2标签截取字符串
- jstl 截取字符串的方法
- 利用jstl:functions截取字符串
- 【连载】【STM32神舟III号实验例程】蜂鸣器实验工程实验(实验二)
- 沟通技巧要这么提高
- 数字水印技术
- AjaxPro使用说明文档
- DLL
- jstl三目运算:前台页面截取字符串
- 数据集成之主数据管理(转载整理)
- 如何抵制人生中的诱惑
- 【连载】【STM32神舟III号实验例程】EEPROM 24C02工程实验(实验九)
- 产品改版中的管理经验
- 如何提高Alexa排名
- 观察者模式
- 【连载】【STM32神舟III号实验例程】SRAM访问实验(实验十二)
- wireshark抓取本地程序之间的封包