项目中采用 spring 3.0 mvc 和 displaytat
在displaytag中 每次翻页采用的是get方式,如果加上查询,displaytag会自动将参数拼装一个链接 ,以get的方式提交到后台。
如果你查询的是中文,问题出来了,这个参数就会以乱码的形式穿到后台,当你查询后分页 就会导致数据不能出现。。。 此时 ,就是程序员的悲剧了。
当时我解决这个问题的时候也是很费劲,一度怀疑springmvc的get方法,后来又怀疑displaytag的内部构件是否出现了我问题。曾经想过改displaytag.....
后来网上说 改tomcat 的配置问题,这里我没有尝试,因为开发的容器是tomcat 那如果部署的服务器不是tomcat 那我该如何?
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
这样改如果你有静态文件图片 比如 。。 [http://localhost:8080/community/images/我.jpg] 这样的路径就能准确的找到资源文件。。。。中文的“我”。这个并发主题,言归正传....
直接贴代码:
<script type="text/javascript">
function submitForm(){
var titles = encodeURIComponent(encodeURIComponent($("#titleName").val()));
var status = $("#status").val();
window.location.href='managerNotices?titleName='+titles+"&status="+status;
}
</script>
<div class="container">
<div id="homepagecontent" >
<div class="photo_list_top">
<h2>社区公告 </h2>
</div>
<div class="community_type">
<div class="selected_photo"><a href="#">社区公告</a></div>
<div class="unselected_photo"><a href="manager/votes?page=1&size=15">社区投票</a></div>
<div class="l"><img src="images/bqc_or.gif"></div>
</div>
<div class="massage_main">
<form name="form" style="padding:0 20px;width:760px;">
<table class="editTable">
<tr>
<td width="20%" class="editTD01"><div align="right">标题名称:</div></td>
<td width="30%" class="editTD02">
<input id="titleName" name="titleName" value="${notice.title}" />
</td>
<td width="20%" class="editTD01"><div align="right">类型:</div></td>
<td width="30%" class="editTD02">
<select id="status" name="status" style="width: 160px;">
<option value="">--请选择--</option>
<c:forEach items="${statuss}" var="status" varStatus="sta">
<option value="${sta.index}" ${notice.status eq status ? "selected=selected" : ""}>${status}</option>
</c:forEach>
</select>
</td>
</tr>
</table>
<table align="center" style="margin-bottom:10px;">
<tr>
<td><input type="button" value="查询" class="butn" οnclick="javascript:submitForm();"></td>
<td><input type="button" value="创建" class="butn" οnclick="javascript:window.location.href='managerNotices?form';"></td>
</tr>
</table>
</form>
<div class="community_left">
<display:table name="noticeLists" id="noticeList" class="editTable2" pagesize="15" sort="external" partialList="true" size="total" requestURI="">
<display:column title="序号" style="width:30px;text-align:center;">${noticeList_rowNum}</display:column>
<display:column property="title" title="标题" style="width:auto;" />
<display:column property="status" title="状态" style="width:auto;"></display:column>
<display:column property="messageStatus" title="草稿" style="width:auto;"></display:column>
<display:column title="创建时间" style="width:108px;"><fmt:formatDate value="${noticeList.createdTime}" type="both"/></display:column>
<display:column title="操作" style="width:108px;">
<a href="<c:url value='managerNotices?show&id=${noticeList.id}'/>">查看</a>
<a href="<c:url value='managerNotices?form&id=${noticeList.id}'/>">修改</a>
<a href="#" οnclick="javascript:del(${noticeList.id})">删除</a>
</display:column>
</display:table>
</div>
</div>
</div>
</div>
后来我 在这:
var titles = encodeURIComponent(encodeURIComponent($("#titleName").val()));
转码了两次.....
@RequestMapping(method=RequestMethod.GET) public String list(HttpServletRequest request,HttpServletResponse response,Notice notice, Model uiModel){ String pageIndexName = new ParamEncoder("noticeList").encodeParameterName(TableTagParameters.PARAMETER_PAGE); int pageIndex = ServletRequestUtils.getIntParameter(request,pageIndexName, 1); //获得当前登录的用户 Long customerId = (Long) request.getSession().getAttribute(WebConfig.CUSTOMER_ID); Publisher publisher = null; if(customerId != null && !"".equals(customerId)){ publisher = Publisher.findPublisher(customerId); } String title =request.getParameter("titleName"); if(title != null && !"".equals(title.trim())){ try { // title = new String(title.getBytes("ISO-8859-1"),"UTF-8"); title=java.net.URLDecoder.decode(title,"UTF-8");/*需要处理异常*/ notice.setTitle(title); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //获得这个社区下 所有的公告 PageResult pageResult = Notice.findNotics(notice.getTitle(),null,notice.getStatus(),notice.getUptown(),notice.getCommunity(),pageIndex, WebConfig.PER_PAGE); uiModel.addAttribute("noticeLists", pageResult.getItems()); uiModel.addAttribute("total",pageResult.getTotal()); uiModel.addAttribute("notice",notice); uiModel.addAttribute("statuss",AuditStatus.values()); return "manager/notice/list"; }
String title =request.getParameter("titleName"); if(title != null && !"".equals(title.trim())){ try { // title = new String(title.getBytes("ISO-8859-1"),"UTF-8"); title=java.net.URLDecoder.decode(title,"UTF-8");/*需要处理异常*/ notice.setTitle(title); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
这一款就是就是转码的过程。。 我为什么想分享这样一篇文章来说明这样一件简单的事情? 只因当初我在这里走了弯路,我也知道是转码的问题 ,一时间居然不知道在那去转码,曾经嗨怀疑过spring 的get方式 以及 displaytag 对中文的支持.....
呵呵 方法论了。。。 欢迎加我q 125218619 讨论这个问题 或者 进入我的群讨论java的种种问题 :84436262 Java生活 部落
http://url.cn/LIRAm2
分享中成长,交流中交往
大数据资料共享。