最近遇到这么一个问题,一个是查询乱码(16进制字符串),另外一个是URL传参需要对参数转码,因为传的参数是一串中文字符,所以需要处理。前台转码倒是方便,一种情景是直接在请求发送触发的事件里面直接转码,然后跳到后台里面,然后在action里面再转码一次。在这个过程中遇到一个问题如代码所示,
前台代码:
| id=”leaderId” name=”model.leaderId” οnchange=”changeLeaderName(this)” /> |
style=”width=100%” class=”search” title=”” value=”${model.activityTitle}”> |
style=”width=100%” class=”search” title=”” value=”${model.activityContent}”> |
|
后台代码:
action 中
leaderNameList=dictservice.getItemsByDictValue(“FGJTLD”);//获取字典项
manager中:
public Page
getPageList(Page
page,ToaLeaderAct model)throws SystemException,ServiceException{
try{
//查询参数获取
String leaderName=model.getLeaderName()==null?””:model.getLeaderName();
String activityTitle=model.getActivityTitle()==null?””:model.getActivityTitle();
String activityContent=model.getActivityContent()==null?””:model.getActivityContent();
StringBuffer hql=new StringBuffer();
hql.append(“from ToaLeaderAct t where 1=1”);
//站位符参数数组集合
List paramList = new ArrayList();
if(!””.equals(leaderName)) {
leaderName=java.net.URLDecoder.decode(leaderName);
hql.append(” and t.leaderName = ? “);
paramList.add(leaderName);
}
if(!””.equals(activityTitle)) {
activityTitle=java.net.URLDecoder.decode(activityTitle);
后来使劲调试还是发现在Linux系统中转码问题无法实现(Windows环境正常),前台转码有效,后台失效了。查询不出来东西,于是去掉了manager中的转码,在action中转码
如图所示:

之后才有效。之前Linux环境下一直都是16进制码,Windows环境下不转码也是正常的。
情景二:ajax传参的过程中
| .append(leader).append(“‘,’活动’);\”>”) .append(leader) .append(“ |
“);
}
getResponse().getWriter().write(innerHtml.toString());
return null;
}
由于框架中使用的都是在后台中拼接HTML语句,有一个很麻烦的地方leadername那个参数是中文,而URL中不能存在中文,所以需要转码。但是这种不能像之前那样前台转一次,后台转一次,因为框架中MVC没明显体现出来,拼接的HTML语句转码太繁琐了,于是加了两句话就实现了,
getResponse().setContentType(“text/html;charset=UTF-8”);
注意这个地方不能再调用list方法了,因为list方法里面转码了一次,所以必须方法重写,可能确实有点麻烦,这种方式有点笨拙,但是结果还是实现了。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223650.html原文链接:https://javaforall.net
