您的位置:首页 > 大数据 > 人工智能

Rolling with Rails 2.0 - Part 2(中文)

2008-03-05 23:23 579 查看


Appfuse框架中的Ajax

Appfuse中使用了Sitemesh模块对请求进行封装,默认配置一般为:
<sitemesh>
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
<excludes file="${decorators-file}"/>
<page-parsers>
<parser default="true" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser"/>
<parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser"/>
<parser content-type="text/html;charset=UTF-8" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser"/>
</page-parsers>
<decorator-mappers>
<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="${decorators-file}"/>
</mapper>
</decorator-mappers>
</sitemesh>

Ajax请求一般要求responseText为简单文本或者XML文本。数据量较少时采用无格式简单文本;如果数据量比较大,通常采用XML数据。
后一种情况下,需要在处理Ajax请求的Action中,设置
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
然后创建输出流对象并response数据:
PrintWriter out = response.getWriter();
out.println("<?xml version='1.0' encoding='UTF-8'?>");
out.println("<root>");
out.println("<result>");
......
out.close();
如果是在Appfuse框架下使用的Ajax,就要避免response被Sitemesh封装起来,变成了HTML文本(表现在浏览器端,应该会得到Sitemesh的修饰文件,内嵌了response文本)
解决方法是修改decorators.xml中的配置将处理Ajax的Action排除到默认修饰以外。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: