六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 39|回复: 0

Spirng mvc 与 displaytag

[复制链接]

升级  82%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
41
 楼主| 发表于 2013-1-29 09:13:21 | 显示全部楼层 |阅读模式
   项目中采用 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" ></td><td><input type="button" value="创建" class="butn" ></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="#" >删除</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生活 部落
 
 
 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表