SmartGwt 里面采用 .ds.xml 文件来定义客户端与服务器之间交互的数据源。
用英文都没有问题,一旦碰到中文的title,用正常的
<script src="sc/DataSourceLoader?dataSource=xxx"></script>
这种方式,就会在页面上显示为若干个??
搜索smartclient的论坛,发现有些解决方案,将我的解决方案记录一下:
1. 把html改成jsp,引入
<%@ taglib uri="/WEB-INF/iscTaglib.xml" prefix="isomorphic" %>
2. 在 ds.xml文件中引入fmt.tld
<%@ taglib prefix="fmt" uri="/WEB-INF/fmt.tld" %> <DataSource xmlns:fmt="urn:jsptld:/WEB-INF/fmt.tld" ID="xxx"
3. 在title的地方使用
<field name="name"> <title><fmt:message key="xxx.titleName"/></title> </field>
4. 在jsp文件当中使用
<SCRIPT> <isomorphic:XML> <jsp:include page="/ds/xxx.ds.xml"></jsp:include> </isomorphic:XML> </SCRIPT>
这种形式来引入 datasource,然后中文就正确显示了。
不过,后来发现事情更简单了,第二步和第三步都可以不要,直接1、4步就可以解决问题。
也就是说,ds.xml文件不用特殊处理,就可以搞定了。
注意,我这里所有的ds.xml文件都是utf-8编码格式的,别的格式我没试过。
刚才找到了更好的办法:
感觉上面的方式不够优雅,而且还引入了jsp,非常没有必要。直接访问
/sc/DataSourceLoader?dataSource=xxx
就是乱码,感觉是个小问题,看了一下 DataSourceLoader这个servlet,
比较简单。继承了一下,然后改了一下encoding,就搞定了。
@Override public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( "text/json; charset=UTF-8"); super.processRequest(request, response); }
这种方法,只需要继承一个类,然后改一下web.xml的定义就ok了,不需要引入jsp,
也不需要fmt,感觉更好。