使用Get方式传递中文参数的问题乱码问题!

使用Get方式传递中文参数的问题乱码问题
1,不希望受到Tomcat中server.xml中的 URIEncoding的配置的影响,所以使用的方式为:
页面中两次URL编码,服务器端再手工进行一次URL解码(因为在req.getParameter()时已进行进一次URL解码)。
2,在使用Struts2的<s:a>标签时,如果写成<s:a action="xxAction?key=%{key}">,这里生成的链接为 <a href="xxAction?key=中">
最终传递给服务器时,是由浏览器决定的,有时可能会有问题。所以在写的时候要写成:
<s:a action="xxAction">
<s:param name="key">中</s:param>
</s:a>

这样生成的链接就是:<a href="xxAction?key=%E4%B8%Ad">,就肯定没有问题了。

使用Get方式传递中文参数的问题乱码问题!_第1张图片

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
    <title>审批流程列表</title>
    <%@ include file="/WEB-INF/jsp/public/common.jspf"%>
    <script type="text/javascript">
	    function showProcessImage( pdId ){
	    	// var test1 = encodeURI("中");
	    	// var test2 = encodeURI(encodeURI("中"));
	    	// alert("中," + test1 + "," + test2);
	    	
	    	pdId = encodeURI(pdId); // 进行URL编码
	    	pdId = encodeURI(pdId); // 进行URL编码(第2次)
	    	var url = "${pageContext.request.contextPath}/processDefinitionAction_showProcessImage.action?id=" + pdId + "&t=" + new Date();
	    	window.showModalDialog(url, null, "dialogHeight:500px; dialogWidth:600px; resizable:yes");
        }
    </script> 
</head>
<body>

<div id="Title_bar">
    <div id="Title_bar_Head">
        <div id="Title_Head"></div>
        <div id="Title"><!--页面标题-->
            <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 审批流程管理
        </div>
        <div id="Title_End"></div>
    </div>
</div>

<div id="MainArea">
    <table cellspacing="0" cellpadding="0" class="TableStyle">
       
        <!-- 表头-->
        <thead>
            <tr align=center valign=middle id=TableTitle>
            	<td width="200px">流程名称</td>
				<td width="80px">最新版本</td>
                <td width="300px">说明</td>
                <td>相关操作</td>
            </tr>
        </thead>

		<!--显示数据列表-->
        <tbody id="TableData" class="dataContainer" datakey="processDefList">
        
        <s:iterator value="#processDefinitionList">
			<tr class="TableDetail1 template">
				<td>${name} </td>
				<td align="CENTER">${version} </td>
				<td>${description} </td>
				<td><s:a action="processDefinitionAction_delete" onclick="return delConfirm()">
						<s:param name="key">${key}</s:param>
						删除
					</s:a>
					<a href="javascript: showProcessImage('${id}')">查看流程图</a>
				</td>
			</tr>
        </s:iterator>

        </tbody>
    </table>
    
    <!-- 其他功能超链接 -->
    <div id="TableTail">
        <div id="TableTail_inside">
            <table border="0" cellspacing="0" cellpadding="10" align="left">
                <tr>
			        <td><div class="FuncBtn">
                            <div class=FuncBtnHead></div>
                            <div class=FuncBtnMemo>
								<s:a action="processDefinitionAction_addUI">部署流程定义文档</s:a>
							</div>
                            <div class=FuncBtnTail></div>
                        </div></td>
                </tr>
			</table>
        </div>
    </div>
</div>

</body>
</html>
	



package cn.itcast.oa.struts2.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.Collection;
import java.util.zip.ZipInputStream;

import org.jbpm.api.ProcessDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.itcast.oa.base.BaseAction;

import com.opensymphony.xwork2.ActionContext;

@Controller
@Scope("prototype")
public class ProcessDefinitionAction extends BaseAction<Object> {

	private File upload; // 上传的文件
	// private String uploadFileName; // 上传的文件的名称
	private InputStream inputStream; // 下载用的

	private String id; // ProcessDefinition的id是String型的
	private String key;

	/** 列表,显示的是所有流程定义(不同key)的最新版本 */
	public String list() {
		Collection<ProcessDefinition> processDefinitionList = processDefinitionService.findAllLatestVersions();
		ActionContext.getContext().put("processDefinitionList", processDefinitionList);
		return "list";
	}

	/** 删除,指定key所有版本的流程定义都会被删除 */
	public String delete() throws Exception {
		key = new String(key.getBytes("iso8859-1"), "utf-8");
		processDefinitionService.deleteByKey(key);
		return "toList";
	}

	/** 查看流程图(xxx.png) */
	public String showProcessImage() throws Exception {
		// 进行第2次URL解码
		id = URLDecoder.decode(id, "utf-8");

		inputStream = processDefinitionService.getProcessImageResourceAsStream(id);
		return "showProcessImage"; // stream
	}
}


你可能感兴趣的:(乱码问题)