惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 爱跳舞的程序员

freemarker对数字格式的处理 FilePathJaxbUtil(xml文件转JavaBean对象工具) freemarker对日期的处理 PL_SQL常用快捷键 将博客搬至CSDN css+jquery右下角弹框提示框(工作需要就开发调式了) textarea文本居中的问题 bat批量复制文件(一键打包更新代码,避免手动一个个复制) url特殊字符传递参数解决方法(特指超链接) js 拼接字符串带变量(js方法参数单双引号拼接的问题记录) 表单提交由submit改为异步的方式 解决复制select下拉框时 值没法复制的问题 Jquery操作select汇总 博文阅读密码验证 - 博客园 ztree树添加右击菜单 ligerLayout布局(左右分栏) 模糊查询+首字母查询组合框 jquery之ztree树入门(输出最简单树形) java 根据word xml模板生成word(个人v2版本)
displayTag解决中文排序、和翻页查询出错的问题
爱跳舞的程序员 · 2023-04-21 · via 博客园 - 爱跳舞的程序员

displayTag对中文的支持不好,比如如果查询条件中有中文,就无法翻页,无法对中文排序,将中文导出为指定文件时出现乱码等。这些问题有时候会让人很郁闷,有时候逼得你要去修改它的源代码。

对于中文无法翻页、排序。

网上的方法:

      是修改Tomcat下的server.xml文件。找到HTTP的Connector标签,在里面添加一项URIEncoding="..",引号里面的内容取决于你的页面编码,比如可以是GBK,UTF8等。

      按网上方法 本地修改tomcat配置文件测试没效果,而且这个只是针对tomcat,其他容器比如weblogic就不适用了

本人方法一:

对前端传过来的有中文的参数进行转码String xxx= new String (xxx.getBytes("iso8859-1"),"UTF-8");

这种方法只能解决少次的排序,如果疯狂点击排序,那么地址栏参数会越来越多,连续点个五六次就报错了

    @RequestMapping("openGet")
    public ModelAndView openGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String bdzmc = request.getParameter("bdzmc");
        System.out.println("----------------------------------"+bdzmc);
        Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+[\\u4e00-\\u9fa5]+$");
        Matcher matcher = pattern.matcher(bdzmc);
        boolean matches = matcher.matches();
        while (!matches) {
            bdzmc = new String (bdzmc.getBytes("iso8859-1"),"UTF-8");
            matcher = pattern.matcher(bdzmc);
            matches = matcher.matches();
        }
        System.out.println("----------------------------------"+bdzmc);
        
        QueryFilter qf = new QueryFilter(request, "keywordresultItem");
        qf.addFilter("bdzmc", bdzmc);
        List<KeyWordResult> list =keywordresultService .getAll(qf);
        ModelAndView mv = this.getAutoView().addObject("keywordresultList", list).addObject("bdzmc", bdzmc);
        
        return mv;
    }

View Code

本人方法二:

      修改displaytag.js实际上就是对url中的参数添加加密, value = encodeURI(encodeURI(value)); 对参数进行二重编码,然后后台解密val = URLDecoder.decode(val, "UTF-8");

样例:

//displaytag.js中添加新方法,用来对超链接中的参数进行编码
function handleParams(myUrl){
    //中文翻页问题
    if(myUrl.indexOf("ytdyjykdbjgb")){
        if(myUrl.indexOf('?')!=-1&&myUrl.indexOf('&')!=-1){
             var strsWh = myUrl.split("?");
             
             //取得问号前完整连接
             var url1=strsWh[0];
             var url2=strsWh[1];
            // alert(strsWh[0]);
             
            var args={};
             var url3 = url2.split("&");
            // console.log("url3="+url3);
             for (var i = 0; i < url3.length; i++) {
                 var eq = url3[i].indexOf('=');    
                 if(eq == -1) continue;         
                 
                 var name = url3[i].substring(0,eq);   //提取name
                 var value = url3[i].substring(eq+1);  //提取value
                // console.log("name="+name);
                 //console.log("val="+value);
                 
                 var patt=/Q_.*_S/g;
                 if(name.indexOf("Q_")!=-1&&name.indexOf("_S")!=-1){
                     if(value!=""&&value!=undefined){
                        // alert(name);
                        // alert(value);
                         value = encodeURI(encodeURI(value));      //对value进行解码
                         //               console.log("name="+name+",val="+value);
                     }
                 }
                 args[name] = value;                     //存储为属性
             }
             
             myUrl=url1+"?";
             for (let key in args) {
                 if (args.hasOwnProperty(key)) {
                      //  console.log(args[key]) // 
                     //alert("key="+key+",val="+args[key]);
                     myUrl+=(key+"="+args[key]+"&");
                 }
            }
             myUrl=myUrl.substring(0,myUrl.length-1);  //去掉最后一个多余的&
            // alert(myUrl);
        }
        
        return myUrl;
    }    

displaytag.js中添加新方法

function goPage(n,tableIdCode){
    var url = replacecurrentPage($("#_nav"+tableIdCode).attr('href'),n,tableIdCode);
    url = replagePageSize(url,$("#oldPageSize"+tableIdCode).val(),tableIdCode);
    
    var myUrl =replageOldPageSize(url,$("#oldPageSize"+tableIdCode).val(),tableIdCode);
    //alert(myUrl);
    
    location.href= handleParams(myUrl);
    
}


function changePageSize(sel,tableIdCode){
    var url = replagePageSize($("#_nav"+tableIdCode).attr('href'),sel.value,tableIdCode);
    url = replacecurrentPage(url,$("#currentPage"+tableIdCode).val(),tableIdCode);
    
    //location.href=replageOldPageSize(url,$("#oldPageSize"+tableIdCode).val(),tableIdCode);
    var myUrl=replageOldPageSize(url,$("#oldPageSize"+tableIdCode).val(),tableIdCode);
    location.href= handleParams(myUrl);
    
}

修改displaytag中的goPage和changePageSize方法

//调用    
String Q_bdzmc_S = handleUrlParamsTwo(request,"bdzmc", queryFilter);

/**
     * @param param
     * @param queryFilter
     * @return 对包含Q_和_S 的查询条件,进行解码
     * @throws UnsupportedEncodingException 
     * String
     * 
     */
    public String handleUrlParamsTwo(HttpServletRequest request, String key, QueryFilter queryFilter) throws Exception {
        Map<String, Object> filters = queryFilter.getFilters();
        String val = request.getParameter("Q_" + key + "_S");
        System.out.println("val=" + val);
        if (val != null && val != "") {
            int i = 0;
            while (val.indexOf("%") != -1) {
                i++;
                val = URLDecoder.decode(val, "UTF-8");
                if (i == 300) {
                    break;
                }
            }
            System.out.println("val=" + val);
            // Map<String, Object> filters = queryFilter.getFilters();
//            filters.put("Q_" + key + "_S", val);
            filters.put(key, val);
            queryFilter.setFilters(filters);
        } else {

        }
        System.out.println(filters.toString());
        return val;
    }

后端解码