用struts+hibernate的框架开发一个项目,遇到如下问题:
我从jsp页面传一个值到action,action根据这个值从数据库检索数据,然后输出到另一个jsp页面。当我传的这个值是英文时,一切正常,但是中文就不行,抛出javax.servlet.ServletException异常。
我的代码如下:
jsp页面的传值代码:
1: <bean:define id= "name " name= "list1 " property= "name "> </bean:define> //list1是之前已经定义好的。
2: <a href= " <%= "/search/detail.do?name= "+name%> " target= "_blank "> //detail.do根据name从数据库检索数据。
DetailAction中的代码:
String name = request.getParameter( "name ");
String hql = "from Person p where p.name=:name ";
try{
Session session = HibernateUtil.currentSession();
Query query = session.createQuery(hql);
query.setString( "name ", name);
List detaillist = null;
detaillist = query.list();
Person person = new Person();
person = (Person)detaillist.get(0);
request.setAttribute( "name ", person.getName());
request.setAttribute( "age ", person.getAge());
request.setAttribute( "sex ", person.getSex());
}
catch(HibernateException e){
e.printStackTrace();
}
finally{
try
{
HibernateUtil.closeSession();
}
catch(HibernateException e1)
{
e1.printStackTrace();
}
}
return mapping.findForward( "detail ");
}
显示detail信息的jsp页面中的相关代码:
<%
String name = (String)request.getAttribute( "name ");
String age = (String)request.getAttribute( "age ");
String sex = (String)request.getAttribute( "sex ");
%>
<table width= "750 " align= "center ">
<tr>
<td>
姓名
</td>
<td> <%=name %> </td>
</tr>
<tr>
<td>
年龄
</td>
<td> <%=age %> </td>
</tr>
<tr>
<td>
性别
</td>
<td> <%=sex %> </td>
</tr>
</table>
注意问题的关键:当我传的这个name是英文时,一切正常,可以显示出姓名、年龄和性别,但是如果是中文,则抛出javax.servlet.ServletException异常,异常的具体内容是index:0, size: 0。提示出异常的语句是:person = (Person)detaillist.get(0); 也就是说,根本没有检索到数据,但是数据库中确实有和name一致的数据。
另:所有需要指定编码方式的地方都是用的GB2312。
请老手指点,这问题应该怎么解决。
------解决方案--------------------
public static final String toGBK(String param) throws UnsupportedEncodingException{
String newString = new String(param.getBytes( "ISO-8859-1 "), "GBK ");