我用struts2传入参数(该参数是中文)结果出现了
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ?? near line 1, column 749 [select new map( idProperty.objectName as objectName, idProperty.deployment.dbid as deploymentDbid ) from org.jbpm.pvm.internal.repository.DeploymentImpl as deployment, org.jbpm.pvm.internal.repository.DeploymentProperty as idProperty, org.jbpm.pvm.internal.repository.DeploymentProperty as keyProperty, org.jbpm.pvm.internal.repository.DeploymentProperty as versionProperty where idProperty.key = 'pdid' and idProperty.deployment = deployment and keyProperty.key = 'pdkey' and keyProperty.objectName = idProperty.objectName and keyProperty.deployment = deployment and versionProperty.key = 'pdversion' and versionProperty.objectName = idProperty.objectName and versionProperty.deployment = deployment and keyProperty.stringValue = ''??'' ]
org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
网上找好像是字符转换的问题
于是我把接受的参数转换成utf-8
String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("utf-8"));
然后debug,发现processDefinitionKey是乱码。。。。
而我用
String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("GBK"));debug是正常的。。。
于是我输出eclipse默认编码
System.out.println("defaultCahrset-->"+Charset.defaultCharset());
发现是gbk..
我用网上的方法改了eclipse的默认编码:网址如下
http://www.cnblogs.com/smartdog/archive/2011/05/23/2054602.html
又用project的clean重新编译了类
最后不再有错误。。
如果没有改eclipse默认编码
可以用
String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("UTF-8"));
试试,他是从二进制转换,应该不会出现乱码
如果改了eclipse默认编码就不需要用
这其中还有一个让我弄了半天
<s:a action="processDefinitionAction_deleteAll?deploymentId=‘%{key}’">删除</s:a>
<s:a action="processDefinitionAction_deleteAll?deploymentId=%{key}">删除</s:a>
注意看 第一句有单引号' '。。。。这个是不能加的。。。
如果你输出processDefinitionKey发现有单引号就是不对了