我在使用文本框时用验证有效性里面的长度限制50,即是下面的代码
<html:text property="msgTitle" value="${message.msgTitle}" style="width:735px;" styleClass="input" styleId="msgTitle" maxlength="50">
得到的结果是限制了字母或者数字只能输入小于或等于50个
汉字也能输入50个,但是一个汉字不是占2个字节的吗?
有没有办法控制字节的数量,比如我最多可以输入50个字,但是我只让它显示前20个字,多余的字用...表示?

解决方案 »

  1.   

    查询分页,可以对显示地记录进行删除操作,我怎么可以点删除后让页面停留在我操作地那一页,而不是跳回到第一页。 这个理论我懂 可是我就是不会写啊 
    // 添加消息
    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>&nbsp;&nbsp;&nbsp;&nbsp;
    <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>&nbsp;&nbsp;&nbsp;&nbsp;
    <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>
    这个是显示页面各位大侠告诉我要怎么搞就可以达到这个效果啊?
      

  2.   

    给你一个按照输入截取字符串并前超过文字以"..."结束的方法。接分!
     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;   
      }
    两个参数  前面是你的字符串,后面是你要开始'...'的位数
      

  3.   

    看我博客里面有按字节来截取字符串的方法 但是是java的
      

  4.   


    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按字节截取截取的方法来了
      

  5.   


    呀呀呀!!感谢感谢!再问个很弱智的问题,if (str.charCodeAt(i) > 255)
    {
    // 按照预期计数增加2
    a += 2;
    }
    else
    {
    a ++ ;
    } 这段的意思是啥意思?我不懂js代码,java也很差,只知道那些个理论的,很多东西说了怎么用都还是不会
    我页面上是不是我哪个参数里面需要这个判断就在哪里调用这个方法?
      

  6.   


    那我页面上怎么调用这个方法?
    <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"/>&nbsp;&nbsp;
    <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%">&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;
    <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>&nbsp;&nbsp;&nbsp;&nbsp;
    <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>
      

  7.   

    if (str.charCodeAt(i) > 255)
    {
    // 说明不是字母,按照预期计数增加2
    a += 2;
    }
    else
    {
    //说明是字母了
    a ++ ;
      

  8.   

    charCodeAt() 方法可返回指定位置的字符的 Unicode 编码
    一般字母和数字是不会超过255的
      

  9.   

    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;
    }var v = ${message.msgTitle} ; 
    if(v.lenB()>=50){
    document.getElmentById("msgTitle").value = substr(v,47)+"...";
    }else{
    document.getElmentById("msgTitle").value = v;
    }
    差不多就这样 自己再改改