`

pager-taglib分页控件查询参数乱码解决方法

阅读更多
[size=large][size=x-large][b]以前搞了很长时间一直没解决jsp pager-tablib查询带中文参数出现乱码的错误。今天花了相对较少的时间解决了很开心,原因和解决方法如下:

问题:[size=large]


使用<pg:param name="key" />标签传递中文参数时,会有乱码。

原因:

因为它默认是用gb2312来对添加的参数进行编码,如果你的过滤器、jsp页面都是采用的gb2312就没有什么问题,如果你采用的是utf-8来编码,那么中文参数传递过程中就会出现乱码导致无法解析。

网上有很多解决办法,重新修改编译源代码是一种方法;

在com\jsptags\navigation\pager下面的PagerTag的addParam(String name, String value)中,它原本是采用的URLEncoding.encode(value)方式来对传递的参数进行编码的,修改成为 URLEncoding.encode(value, "UTF-8")后,替换掉原来jar包的这个class文件再重新打包并引入到项目中就可以了。

也以前也有人建议,加过滤器,修改服务器编码/jsp编码为一致,加URLEncoding都未解决,当时页面都是设置为utf-8 的,一直没搞定。

解决办法:

将JSP页面编码pageEncoding设置为GB2312,在web.xml中加中文过滤器,即可解决!

<!-- 解决中文问题 -->
    <filter>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <filter-class>
            com.jxtit.util.SetCharacterEncodingFilter
          </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GB2312</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

<!-- 解决中文问题 -->

过滤器:

SetCharacterEncodingFilter:

public class SetCharacterEncodingFilter implements Filter {

    // ----------------------------------------------------- Instance Variables

    /**
     * The default character encoding to set for requests that pass through this
     * filter.
     */
    protected String encoding = null;

    /**
     * The filter configuration object we are associated with. If this value is
     * null, this filter instance is not currently configured.
     */
    protected FilterConfig filterConfig = null;

    /**
     * Should a character encoding specified by the client be ignored?
     */
    protected boolean ignore = true;

    // --------------------------------------------------------- Public Methods

    /**
     * Take this filter out of service.
     */
    public void destroy() {

        this.encoding = null;
        this.filterConfig = null;

    }

    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     *
     * @param request
     *            The servlet request we are processing
     * @param result
     *            The servlet response we are creating
     * @param chain
     *            The filter chain we are processing
     *
     * @exception IOException
     *                if an input/output error occurs
     * @exception ServletException
     *                if a servlet error occurs
     */
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null) {
                request.setCharacterEncoding(encoding);
            }
        }
        // Pass control on to the next filter
        chain.doFilter(request, response);
        //BufferedWriter bw = new BufferedWriter(new FileWriter("/temp/insertlog.log"));
    }

    /**
     * Place this filter into service.将这个filter放在服务器中
     *
     * @param filterConfig
     *            The filter configuration object
     */
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null) {
            this.ignore = true;
        } else if (value.equalsIgnoreCase("true")) {
            this.ignore = true;
        } else if (value.equalsIgnoreCase("yes")) {
            this.ignore = true;
        } else {
            this.ignore = false;
        }
    }

    // ------------------------------------------------------ Protected Methods
    /**
     * Select an appropriate character encoding to be used, based on the
     * characteristics of the current request and/or filter initialization
     * parameters. If no character encoding should be set, return
     * <code>null</code>.
     * <p>
     * The default implementation unconditionally returns the value configured
     * by the <strong>encoding</strong> initialization parameter for this
     * filter.
     *
     * @param request
     *            The servlet request we are processing
     */
    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }

}
[b]
[/b][color=darkred][/color][/size][/size][/size][/b]
分享到:
评论

相关推荐

    使用pager-taglib分页完整例子

    为了使用`pager-taglib`,你需要将对应的jar包(通常名为`pager-taglib-x.x.x.jar`)添加到项目的类路径中。这可以通过在`WEB-INF/lib`目录下放入jar包或者在构建工具如Maven或Gradle的依赖管理中进行设置来实现。 ...

    pager-taglib分页标签

    - 首先,下载`pager-taglib-2.0.war`文件,这是一个Web应用的归档文件。 - 将`war`文件部署到你的应用服务器(如Tomcat、Jetty等)。这通常可以通过将`war`文件拷贝到服务器的`webapps`目录下完成,服务器会自动解压...

    pager-taglib分页jar包

    **标题解析:**"pager-taglib分页jar包"指的是一个专门为JavaServer Pages (JSP) 开发的分页库,它包含了一个名为`pager-taglib`的Java Archive (JAR) 文件。这个JAR包提供了自定义的JSP标签,帮助开发者在网页上...

    Pager-taglib页面分页示例

    3. 设置分页参数,如总记录数、每页记录数、当前页码等。 4. 使用Pager-taglib的标签,如`&lt;pg:pager&gt;`,将这些参数传入并渲染分页链接。 **4. 示例代码** 在Servlet中,你可以通过注解来切换分页样式。例如,可以...

    pager-taglib 分页框架+附带例子

    通过以上内容,我们可以看到`pager-taglib`是一个强大的分页工具,它为Java Web开发提供了简洁、高效的分页解决方案。结合适当的后端逻辑,开发者可以轻松实现高性能的分页功能,从而提升网站的用户体验。

    pager-taglib 分页扩展实例

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...

    pager-taglib.jar包下载

    在`pager-taglib`标签库中,包含了处理分页所需的各个标签,如显示总页数、当前页、上一页、下一页等,这些标签可以直接插入到JSP页面中,通过传入必要的参数,如当前页码、总记录数等,就能自动计算并生成分页链接...

    pager-taglib中文乱码解决后的JAR包

    用pager-taglib进行分页时,如果出现中文参数,由于pager-taglib默认是用ISO8859-1编码后进行参数传递,故会出现乱码现象。本人下载源码后,将编码的语句注释掉,即不进行编码,解决了中文乱码问题。改写后的代码已...

    pager-taglib分页方法

    **Pager-taglib分页方法详解** Pager-taglib是Java Web开发中一种常用的分页标签库,它极大地简化了在JSP页面中实现分页功能的过程。这个标签库通常与Servlet和JSP一起使用,尤其在大数据量展示时,提供用户友好的...

    pager-taglib-2.0.jar 已解决乱码

    已解决中文乱码问题的 pager-taglib-2.0.jar包。

    pager-taglib 分页标签使用

    `pager-taglib`是Java Web开发中常用的分页标签库,它简化了在JSP页面上实现分页功能的过程。这个标签库通常与Spring MVC、Struts2等框架结合使用,提供了一种声明式的方式来展示数据分页。下面将详细解释`pager-...

    pager-taglib-2.0

    5. **交互逻辑**:在后端,你需要处理请求参数,如页码,根据这些参数查询数据库并返回相应的分页数据。这通常在Servlet或控制器层完成。 6. **响应处理**:在接收到分页请求后,服务器端应计算出要显示的数据范围...

    pager-taglib源码

    这是pager-taglib的官方源码,但在采用官方的pager-taglib分页传输中文参数会出现乱码,所以我采用maven新建一个pager-taglib项目对pager-taglib的源码进行小小的改动,是他支持中文传输,更重要的是把源代码提供给...

    pager-taglib jar 和 tld 以及使用说明

    `pager-taglib`是一个用于实现分页的自定义标签库,它通过JSP标签来简化分页逻辑的编写。本篇文章将详细解释`pager-taglib.jar`和`tld`文件的用途,以及如何在项目中使用它们。 1. **什么是`pager-taglib.jar`?** ...

    pager-taglib分页例子

    在这个“pager-taglib分页例子”中,我们将探讨如何使用`pager-taglib`进行高效且简洁的分页实现。 首先,`pager-taglib`提供了几个预定义的标签,如`&lt;pg:pager&gt;`、`&lt;pg:firstPage&gt;`、`&lt;pg:lastPage&gt;`、`...

    displaytag,pager-taglib 分页包

    Pager-taglib是另一个用于分页的JSP标签库,它的主要目标是提供简单易用的分页解决方案。虽然它的功能相对Displaytag来说较为单一,但在一些轻量级项目中,Pager-taglib可能是更好的选择。其核心知识点包括: 1. **...

    pager-taglib-2.0及使用方法

    - **动态参数**:允许你在URL中传递动态参数,以便在分页过程中保持其他查询条件不变。 - **显示模式**:可以选择显示固定的页码数量,或者根据总页数动态调整显示的页码范围。 ### 5. 示例代码 在`pager-taglib的...

    pager-taglib-2.0.rar

    "pager-taglib-2.0" 是一个专为此目的设计的实用分页标记库,它能够帮助开发者快速构建出类似Google、Yahoo等知名网站的高质量分页效果。 **什么是Taglib** Taglib,全称JSP Tag Library,是JavaServer Pages(JSP...

Global site tag (gtag.js) - Google Analytics