08-01
23
几种对标题长度限制的办法
作者:Java伴侣 日期:2008-01-23
一.Struts本来有<bean:write>标签,对其类StringTag进行扩展
我觉得在读数据的时候截取标题的长度有一些不妥当,我刚才试图写了一个很简单的自定义标签,在struts中有这样一个标签<bean:write name="article" property="title"/>上面标签的意思是读取article对象中的title属性的值,现在对title的长度要求限制在一定范围之内,定义此标签的类是org.apache.struts.taglib.bean.WriteTag如果对这个类扩展,加一个属性cut ,再根据cut的大小来截取标题的长度,我对WriteTag继承,重写doStartTag(), package org.apache.struts.taglib.bean; //注意,要这样写,不然会出错的
对标签重写完毕,然后写一个dtd文件
写完了之后,我们就可以在jsp页面中调用它了,首先引用定义标签
<%@ taglib uri="/WEB-INF/titlecut.tld" prefix="title" %>
然后对链接代码进行重写,我写的是下面一段
用以上方法当鼠标放到标题上时回显示完整的标题,在页面中显示部分标题
以上为来自网上的第一种方法,方法挺好的,避免了修改ActionForm,以及连带的其他的改变,在最小程度上对原有代码进行了修改。有两个建议:
第一行,不用用package指到struts包中,因为这不是struts本身的部分,你把你的StringTag类放到cn.qhang.cms.article中即可,然后在类中
import org.apache.struts.taglib.bean.WriteTag;
2. setValue方法还值得修改,考虑到页面的显示可能出现这样的几个情况,如果标题长度等于要截取的长度,那么就不用加省略号了,而如果原标题长度长于要截取的长度,那么实际上为了页面的整齐,要把字符多截短两个,留出省略号的位置,这个方法可以参考我原始代码中关于标题长度截取的方法。 3. 还有你的这个定义文件,放到page.tld里面比较好,整合在一起。
第二种,自己写一个类就完事了,这种方法比较省事,但页面有代码,不建议用
JSP中:
//corpintroduce是要截取的字段,本来可以直接放<bean:write>进去,不用<bean:define>。可惜我现在的开发环境版本的<% %>里面不支持<bean:write> ;所以....
// 自己注意类名字和方法,变量名。我市把我代码里面的直接贴出来的
// getCutString(要截取的字符串,开始位置,结束位置(就是要截取的位数),截取字符串的最后加的符号 )
第三种,不用想也知道了,是自定义标签,但还是不建议用,毕竟第一种的也是自定义,而且Struts的bean:write标签无论从功能还是性能上,都很良好
我觉得在读数据的时候截取标题的长度有一些不妥当,我刚才试图写了一个很简单的自定义标签,在struts中有这样一个标签<bean:write name="article" property="title"/>上面标签的意思是读取article对象中的title属性的值,现在对title的长度要求限制在一定范围之内,定义此标签的类是org.apache.struts.taglib.bean.WriteTag如果对这个类扩展,加一个属性cut ,再根据cut的大小来截取标题的长度,我对WriteTag继承,重写doStartTag(), package org.apache.struts.taglib.bean; //注意,要这样写,不然会出错的
复制内容到剪贴板 程序代码
StringTag extends WriteTag{....
public String setValue(String value) {
String tempProperty=value;
if(cut>0){
if(tempProperty.length()>=(cut+1)){
tempProperty=tempProperty.substring(0, cut) +"..."; }
}
return tempProperty;
}
public int doStartTag() throws JspException { // Look up the requested bean (if necessary)
if (ignore) {
if (TagUtils.getInstance().lookup(pageContext, name, scope) == null) {
return (SKIP_BODY); // Nothing to output
}
} // Look up the requested property value
Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope); if (value == null) {
return (SKIP_BODY); // Nothing to output
} // Convert value to the String with some formatting
String output = formatValue(value);
output=setValue(output); //这句是加的,别的都是原来的
// Print this property value to our output writer, suitably filtered
if (filter) {
TagUtils.getInstance().write(pageContext, TagUtils.getInstance().filter(output));
} else {
TagUtils.getInstance().write(pageContext, output);
} // Continue processing this page
return (SKIP_BODY);}
public String setValue(String value) {
String tempProperty=value;
if(cut>0){
if(tempProperty.length()>=(cut+1)){
tempProperty=tempProperty.substring(0, cut) +"..."; }
}
return tempProperty;
}
public int doStartTag() throws JspException { // Look up the requested bean (if necessary)
if (ignore) {
if (TagUtils.getInstance().lookup(pageContext, name, scope) == null) {
return (SKIP_BODY); // Nothing to output
}
} // Look up the requested property value
Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope); if (value == null) {
return (SKIP_BODY); // Nothing to output
} // Convert value to the String with some formatting
String output = formatValue(value);
output=setValue(output); //这句是加的,别的都是原来的
// Print this property value to our output writer, suitably filtered
if (filter) {
TagUtils.getInstance().write(pageContext, TagUtils.getInstance().filter(output));
} else {
TagUtils.getInstance().write(pageContext, output);
} // Continue processing this page
return (SKIP_BODY);}
对标签重写完毕,然后写一个dtd文件
复制内容到剪贴板 程序代码
<tag>
<name>write</name>
<tagclass>org.apache.struts.taglib.bean.StringTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>bundle</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>filter</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>format</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>formatKey</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>ignore</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>locale</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>cut</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<name>write</name>
<tagclass>org.apache.struts.taglib.bean.StringTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>bundle</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>filter</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>format</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>formatKey</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>ignore</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>locale</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>cut</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
写完了之后,我们就可以在jsp页面中调用它了,首先引用定义标签
<%@ taglib uri="/WEB-INF/titlecut.tld" prefix="title" %>
然后对链接代码进行重写,我写的是下面一段
复制内容到剪贴板 程序代码
<html:link action="/admin/view" paramName="article"
paramProperty="id" paramId="id"
title="<bean:write name='article' property='title'/>">
<title:write name="article" property="title" cut="18"/>
</html:link>
paramProperty="id" paramId="id"
title="<bean:write name='article' property='title'/>">
<title:write name="article" property="title" cut="18"/>
</html:link>
用以上方法当鼠标放到标题上时回显示完整的标题,在页面中显示部分标题
以上为来自网上的第一种方法,方法挺好的,避免了修改ActionForm,以及连带的其他的改变,在最小程度上对原有代码进行了修改。有两个建议:
第一行,不用用package指到struts包中,因为这不是struts本身的部分,你把你的StringTag类放到cn.qhang.cms.article中即可,然后在类中
import org.apache.struts.taglib.bean.WriteTag;
2. setValue方法还值得修改,考虑到页面的显示可能出现这样的几个情况,如果标题长度等于要截取的长度,那么就不用加省略号了,而如果原标题长度长于要截取的长度,那么实际上为了页面的整齐,要把字符多截短两个,留出省略号的位置,这个方法可以参考我原始代码中关于标题长度截取的方法。 3. 还有你的这个定义文件,放到page.tld里面比较好,整合在一起。
第二种,自己写一个类就完事了,这种方法比较省事,但页面有代码,不建议用
JSP中:
复制内容到剪贴板 程序代码
<%@ page import="org.common.util.Util.*" %> //调用截取字符的类
<bean:define id="corpintroduce" name="companyinfo" property="corpintroduce" type="java.lang.String"></bean:define>
<%=org.common.util.Util.getCutString(corpintroduce,0,250,"...")%>
<bean:define id="corpintroduce" name="companyinfo" property="corpintroduce" type="java.lang.String"></bean:define>
<%=org.common.util.Util.getCutString(corpintroduce,0,250,"...")%>
//corpintroduce是要截取的字段,本来可以直接放<bean:write>进去,不用<bean:define>。可惜我现在的开发环境版本的<% %>里面不支持<bean:write> ;所以....
复制内容到剪贴板 程序代码
Java类
public class Util {
public final static String getCutString(String input, int start, int len,
String tail) {
String str = cutString(input, start, len);
if (str.length() > 0 && str.length() < input.length()) {
return str + tail;
}
return str;
}
}
public class Util {
public final static String getCutString(String input, int start, int len,
String tail) {
String str = cutString(input, start, len);
if (str.length() > 0 && str.length() < input.length()) {
return str + tail;
}
return str;
}
}
// 自己注意类名字和方法,变量名。我市把我代码里面的直接贴出来的
// getCutString(要截取的字符串,开始位置,结束位置(就是要截取的位数),截取字符串的最后加的符号 )
第三种,不用想也知道了,是自定义标签,但还是不建议用,毕竟第一种的也是自定义,而且Struts的bean:write标签无论从功能还是性能上,都很良好
评论: 0 | 引用: 0 | 查看次数: 1308
发表评论