我在使用文本框时用验证有效性里面的长度限制50,即是下面的代码
<html:text property="msgTitle" value="${message.msgTitle}" style="width:735px;" styleClass="input" styleId="msgTitle" maxlength="50">
得到的结果是限制了字母或者数字只能输入小于或等于50个
汉字也能输入50个,但是一个汉字不是占2个字节的吗?
有没有办法控制字节的数量,比如我最多可以输入50个字,但是我只让它显示前20个字,多余的字用...表示?
<html:text property="msgTitle" value="${message.msgTitle}" style="width:735px;" styleClass="input" styleId="msgTitle" maxlength="50">
得到的结果是限制了字母或者数字只能输入小于或等于50个
汉字也能输入50个,但是一个汉字不是占2个字节的吗?
有没有办法控制字节的数量,比如我最多可以输入50个字,但是我只让它显示前20个字,多余的字用...表示?
// 添加消息
public ActionForward addSysMessage(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String act = request.getParameter("act");
if (act.equals("insert") || act == "insert") {// 新增
SysMessageForm message = (SysMessageForm) form;
if (sysMessageService.addMsg(message)) {
return this.turnOver(mapping, request, "添加消息成功",
"sysMessageAction.do?method=listSysMessage");
} else {
return this.turnOver(mapping, request, "添加消息失败,消息名称或代码已存在",
"sysMessageAction.do?method=listSysMessage");
}
} else if (act.equals("update") || act == "update") {// 修改更新
SysMessageForm message = (SysMessageForm) form;
if (sysMessageService.updateMsg(message)) {
return this.turnOver(mapping, request, "修改消息成功",
"sysMessageAction.do?method=listSysMessage");
} else {
return this.turnOver(mapping, request, "修改消息信息失败,消息名称已存在",
"sysMessageAction.do?method=listSysMessage");
}
} else {
return this.showErrMsg(mapping, request, "操作失败。");
}
} // 修改消息
public ActionForward modifySysMessage(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String act = request.getParameter("act");
if (act == "add" || act.equals("add")) {
return mapping.findForward("addSysMessage");
} else if (act == "delete" || act.equals("delete")) {// 删除
String mid = request.getParameter("mid");
int count = sysMessageService.deleteMsg(mid);
if (count > 0) {
return this.turnOver(mapping, request,
"成功删除 " + count + " 条记录","sysMessageAction.do?method=listSysMessage");
} else {
return this.showErrMsg(mapping, request, "操作失败。");
}
} else if (act == "modify" || act.equals("modity")) {// 修改
String id = request.getParameter("mid");
int mid = 0;
if (!id.equals(null) || id != "") {
mid = Integer.parseInt(id);
}
SysMessageForm message = sysMessageService.findSysMessageById(mid);
request.setAttribute("message", message);
return mapping.findForward("modifySysMessage");
}
return this.showErrMsg(mapping, request, "操作失败。");
}
这个是我action里面关于添加和修改的代码
<c:choose>
<c:when test="${not empty listSysMessage}">
<c:forEach items="${listSysMessage}" begin="0" step="1" var="message" varStatus="ld">
<tr valign="middle">
<Td width="5%"><input type="checkbox" id="item" value="${message.mid}" title="选择"></Td>
<td width="5%">${message.mid}</td>
<Td width="20%" class="tdd">
<a href="view/sysConfig/sysMessageAction.do?method=viewMessage&mid=${message.mid}&total=${total}&perSize=${perSize}&nextPage=${onPages}">${message.msgTitle}</a>
</Td>
<td width="30%" class="tdd">${message.content}</td>
<td width="20%" class="tdd">${message.msgTime}</td>
<Td width="15%">
<a href="view/sysConfig/sysMessageAction.do?method=viewMessage&mid=${message.mid}&total=${total}&perSize=${perSize}&nextPage=${onPages}">
<img title="查看此记录" src="<%=path%>/view/images/097.gif" border="0" align="middle" /></a>
<a href="view/sysConfig/sysMessageAction.do?method=modifySysMessage&act=modity&mid=${message.mid}&total=${total}&nextPage=${onPages}&perSize=${perSize}">
<img title="修改此记录" src="<%=path%>/view/images/114.gif" border="0" align="middle" /></a>
<a href="view/sysConfig/sysMessageAction.do?method=modifySysMessage&act=delete&mid=0,${message.mid}"
onclick="if(confirm('确定要删除已选中的记录?')){return true;}else{return false;}">
<img title="删除此记录" src="<%=path%>/view/images/083.gif" border="0" align="middle" /></a>
</Td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="7" height="30" valign="middle" align="center" style="color: red;">
暂时还没添加系统字典
</td>
</tr>
</c:otherwise>
</c:choose>
这个是显示页面各位大侠告诉我要怎么搞就可以达到这个效果啊?
public String updateTxt(String txt, int num) {
if (txt == null) return "";
int sf1 = 0;
int sf2 = 0;
String str1 = "<span style=color:#FF0000>";
String str2 = "<strong>";
if (txt.indexOf(str1)!=-1) sf1=1;
if (txt.indexOf(str2)!=-1) sf2=1;
Pattern pattern = Pattern.compile("<.+?>",Pattern.DOTALL);
Matcher matcher = pattern.matcher(txt);
txt = matcher.replaceAll("");
int initVariable = 0;
StringBuffer restr = new StringBuffer();
if (getStringByteLength(txt,num) <= num) {
if (sf1==1) txt = str1 + txt + "</span>";
if (sf2==1) txt = str2 + txt + "</strong>";
return txt;
} String s1=null;
byte[] b;
char[] tempchar = txt.toCharArray();
for (int i = 0; (i < tempchar.length && num > initVariable); i++) {
s1 = String.valueOf(tempchar[i]);
b = s1.getBytes();
initVariable += b.length;
restr.append(tempchar[i]);
} if (num == initVariable || (num == initVariable - 1)) {
restr.append("...");
}
txt = restr.toString();
if (sf1==1) txt = str1 + txt + "</span>";
if (sf2==1) txt = str2 + txt + "</strong>";
return txt;
}
两个参数 前面是你的字符串,后面是你要开始'...'的位数
function substr(str, len)
{
if( ! str || ! len)
{
return '';
}
// 预期计数:中文2字节,英文1字节
var a = 0;
// 循环计数
var i = 0;
// 临时字串
var temp = '';
for (i = 0; i < str.length; i ++ )
{
if (str.charCodeAt(i) > 255)
{
// 按照预期计数增加2
a += 2;
}
else
{
a ++ ;
}
// 如果增加计数后长度大于限定长度,就直接返回临时字符串
if(a > len)
{
return temp;}
// 将当前内容加到临时字符串
temp += str.charAt(i);
}
// 如果全部是单字节字符,就直接返回源字符串
return str;
}JS按字节截取截取的方法来了
呀呀呀!!感谢感谢!再问个很弱智的问题,if (str.charCodeAt(i) > 255)
{
// 按照预期计数增加2
a += 2;
}
else
{
a ++ ;
} 这段的意思是啥意思?我不懂js代码,java也很差,只知道那些个理论的,很多东西说了怎么用都还是不会
我页面上是不是我哪个参数里面需要这个判断就在哪里调用这个方法?
那我页面上怎么调用这个方法?
<body>
<div id="nav">
<div id="main">
<b class="xtop"><b class="xb1"></b><b class="xb2"></b><b class="xb3"></b><b class="xb4"></b></b>
<div class="xboxcontent">
<div style="width: 100%; padding-top: 2px;">
<div style="width:50%;text-align: left; padding:0px 5px 5px 10px; float: left;">
<img src="view/images/311.gif" border="0" align="middle"/>
<span style="font-weight: bold; vertical-align: middle;">系统消息列表</span>
</div>
<div id="tagTitle" style="vertical-align: middle;">
<a href="view/sysConfig/sysMessageAction.do?method=modifySysMessage&act=add">添加系统消息</a>
</div>
</div>
<div style="margin: 0px 5px; width:100%;">
<table border="1" width="100%" id="tables" class="table" cellpadding="0" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#dbebfa">
<tr style="background-color: #ECEEFF; height: 30px;" valign="middle">
<Td width="5%"> </Td>
<td width="5%">ID</td>
<Td width="20%">消息标题</Td>
<Td width="30%">消息内容</Td>
<Td width="20%">时间</Td>
<td width="15%">管理</td>
</tr>
<c:choose>
<c:when test="${not empty listSysMessage}">
<c:forEach items="${listSysMessage}" begin="0" step="1" var="message" varStatus="ld">
<tr valign="middle">
<Td width="5%"><input type="checkbox" id="item" value="${message.mid}" title="选择"></Td>
<td width="5%">${message.mid}</td>
<Td width="20%" class="tdd">
<a href="view/sysConfig/sysMessageAction.do?method=viewMessage&mid=${message.mid}&total=${total}&perSize=${perSize}&nextPage=${onPages}">${message.msgTitle}</a>
</Td>
<td width="30%" class="tdd">${message.content}</td>
<td width="20%" class="tdd">${message.msgTime}</td>
<Td width="15%">
<a href="view/sysConfig/sysMessageAction.do?method=viewMessage&mid=${message.mid}&total=${total}&perSize=${perSize}&nextPage=${onPages}">
<img title="查看此记录" src="<%=path%>/view/images/097.gif" border="0" align="middle" /></a>
<a href="view/sysConfig/sysMessageAction.do?method=modifySysMessage&act=modity&mid=${message.mid}&total=${total}&nextPage=${onPages}&perSize=${perSize}">
<img title="修改此记录" src="<%=path%>/view/images/114.gif" border="0" align="middle" /></a>
<a href="view/sysConfig/sysMessageAction.do?method=modifySysMessage&act=delete&mid=0,${message.mid}"
onclick="if(confirm('确定要删除已选中的记录?')){return true;}else{return false;}">
<img title="删除此记录" src="<%=path%>/view/images/083.gif" border="0" align="middle" /></a>
</Td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="7" height="30" valign="middle" align="center" style="color: red;">
暂时还没添加系统字典
</td>
</tr>
</c:otherwise>
</c:choose>
<tr>
<Td colspan="4" style="text-align: left; font-size:13px; border-right:none; padding-left: 15px;">
<a href="javascript:selectAll();">全选</a> | <a href="javascript:reverseSelect();">反选</a> |
<a href="javascript:delSysMessageSelect();">删除选中</a> |
</Td>
<Td colspan="3" valign="middle" style="text-align: right; border-left:none; padding-right: 15px;">
<jsp:include page="../common/pageScroll.jsp"></jsp:include>
</Td>
</tr>
</table>
</div>
</div>
<b class="xbottom"><b class="xb4"></b><b class="xb3"></b><b class="xb2"></b><b class="xb1"></b></b>
</div>
</div>
</body>
{
// 说明不是字母,按照预期计数增加2
a += 2;
}
else
{
//说明是字母了
a ++ ;
}
一般字母和数字是不会超过255的
{
if( ! str || ! len)
{
return '';
}
// 预期计数:中文2字节,英文1字节
var a = 0;
// 循环计数
var i = 0;
// 临时字串
var temp = '';
for (i = 0; i < str.length; i ++ )
{
if (str.charCodeAt(i) > 255)
{
// 按照预期计数增加2
a += 2;
}
else
{
a ++ ;
}
// 如果增加计数后长度大于限定长度,就直接返回临时字符串
if(a > len)
{
return temp;}
// 将当前内容加到临时字符串
temp += str.charAt(i);
}
// 如果全部是单字节字符,就直接返回源字符串
return str;
}var v = ${message.msgTitle} ;
if(v.lenB()>=50){
document.getElmentById("msgTitle").value = substr(v,47)+"...";
}else{
document.getElmentById("msgTitle").value = v;
}
差不多就这样 自己再改改