Spring 2.5 Ajax 1.7,更新程序收到错误响应
问题内容:
我正在使用Spring 2.5,并使用Ajax.updater(1.7)从Spring中的requestmapping获取响应。
在请求映射中,我返回一个ModelAndView,它引用带有一些文本的jsp。但是问题是当ajax收到响应并更新容器时,整个页面都包装在容器中,而不是jsp输出中,这是为什么呢?
问题答案:
好的,这就是我在Spring 2.5中使用ajax的方式
首先,您需要控制器来响应ajax调用
public class AjaxController extends MultiActionController {
// injected services, daos here
public ModelAndView getAjaxData(HttpServletRequest request, HttpServletResponse response) throws Exception {
String data = // construct your ajax response here - string, json, xml etc
model.put("data", data);
return new ModelAndView("ajax_foo", model);
}
public ModelAndView anotherMethod(HttpServletRequest request, HttpServletResponse response) throws Exception {
String data = // construct your ajax response here - string, json, xml etc
model.put("data", data);
return new ModelAndView("ajax_foo", model);
}
}
然后您需要ajaxView来编写ajax数据以进行响应
public class AjaxView extends AbstractView {
@Override
protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) throws Exception {
String ajaxResponse = map.get("data");
response.setContentType("text/plain; charset=UTF-8");
response.getOutputStream().write(ajaxResponse.getBytes());
}
查看解析器以解决Ajax调用
public class AjaxViewResolver extends AbstractCachingViewResolver {
private String ajaxPrefix;
private View ajaxView;
@Override
protected View loadView(String viewName, Locale locale) throws Exception {
View view = null;
if (viewName.startsWith(this.ajaxPrefix)) {
view = ajaxView;
} else {
}
return view;
}
public void setAjaxPrefix(String ajaxPrefix) {
this.ajaxPrefix = ajaxPrefix;
}
public void setAjaxView(View ajaxView) {
this.ajaxView = ajaxView;
}
}
网址映射,将ajax网址映射到ajax控制器
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/getAjaxData.htm">ajaxController</prop>
<prop key="/anotherMethod.htm">ajaxController</prop>
</props>
</property>
</bean>
控制器具有bean ajaxResolver作为methodNameResolver,例如,控制器具有一些服务或dao
<bean name="ajaxController" class="my.test.web.ajax.AjaxController">
<property name="service" ref="service"/>
<property name="dao" ref="dao"/>
<property name="methodNameResolver" ref="ajaxResolver"/>
</bean>
方法名称解析器
<bean id="ajaxResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/getAjaxData.htm">getAjaxData</prop>
<prop key="/anotherMethod.htm">anotherMethod</prop>
</props>
</property>
</bean>
从AjaxController返回modelAndView时,Ajax View解析器调用您的Ajax视图
<bean id="ajaxViewResolver" class="my.test.web.ajax.AjaxViewResolver">
<property name="ajaxView">
<bean class="my.test.web.ajax.AjaxView"/>
</property>
<property name="ajaxPrefix" value="ajax_"/>
</bean>