目前我正处于Spring mvc的遗留项目中,并且注释无法正常使用。
我必须创建一个控制器动作,它将响应带有JSON响应的ajax调用。
我通过实施Controller接口创建了我的控制器。
我可以用这个实现一个jsp页面但是无法调整它以进行ajax调用。
获取帮助action-servlet.xml中的Xml配置
<bean id="jsonResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order"><value>1</value></property>
</bean>
<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">
<property name="contentType">
<value>text/html</value>
</property>
</bean>
<bean id="myOwnController" class="com.myapp.webapp.action.MyOwnController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<!-- list of inteceptor urls -->
</list>
</property>
<property name="mappings">
<props>
<prop key="/mytest">myOwnController</prop>
<!-- mapping for other controller actions -->
</props>
</property>
</bean>
控制器类
package com.myapp.webapp.action
public class myOwnController implements org.springframework.web.servlet.mvc.Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception
{
Map<String, Object> model = new HashMap<String, Object>();
model.put("success", "true");
return new ModelAndView("jsonView", model);
}
}
ajax调用js方法(在Prototype.js中)
function myAjaxMethod(){
new Ajax.Request('${pageContext.request.contextPath}/jsonView', {
method:'get',
onSuccess: function(transport) {
var response = transport.responseText || "no response text";
alert("Success! \n\n" + response);
},
onFailure: function() { alert('Something went wrong...'); }
});
}
此外,我无法理解ajax调用中的url如何知道这是应该调用的控制器。我是否缺少任何映射?
请帮忙。
答案 0 :(得分:0)
以下是如何从ajax函数调用spring MVC控制器的示例 这都是使用注释驱动的环境完成的。
1)首先需要驱动应用程序注释并将控制器包放在那里。
2)将@RequestMapping添加到将从ajax fn调用的fn中,并为ajax fn'url'属性提供maping URL。
p [om.xml
中的变化需要添加,跟随库转换并以json的形式向ajax成功发送响应。
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
spring conf文件中的更改
<context:component-scan base-package="com.beingjavaguys.controller" />
<mvc:annotation-driven />
控制器代码:
@RequestMapping(value = "/save", method = RequestMethod.POST, headers = { "Content-type=application/json" })
public @ResponseBody
Response saveData(@RequestBody Employee employee) {
System.out.println("First Name: " + employee.getFirstName());
System.out.println("Last Name: " + employee.getLastName());
System.out.println("Email: " + employee.getEmail());
System.out.println("Phone: " + employee.getPhone());
return new Response("1", "Done");
}
ajax函数语法
function doAjaxPost() {
var formData = JSON.stringify({
firstName : $('#firstName').val(),
lastName : $('#lastName').val(),
email : $('#email').val(),
phone : $('#phone').val()
});
$.ajax({
type : "POST",
url : "save",
data : formData,
contentType : 'application/json',
success : function(data) {
if (data.status == '1')
$('#status').html('Form data sent !');
else
$('#status').html('Error in sending data !');
}
});
}
希望这会有所帮助。 使用按钮而不是提交来阻止提交表单上的页面加载并调用ajax fn onClick。
答案 1 :(得分:0)
最后我得到了一个解决方案(不是通过Spring,而是通过一个脏逻辑)。
警告:永远不要使用旧的Spring版本项目。
解决方案:我在ajax调用中呈现了整个html响应,过滤了我的数据并解析为json。
action-servlet.xml文件
<bean id="myOwnController" class="com.myapp.webapp.action.MyOwnController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<!-- list of inteceptor urls -->
</list>
</property>
<property name="mappings">
<props>
<prop key="/mytest.html">myOwnController</prop>
<!-- mapping for other controller actions -->
</props>
</property>
</bean>
控制器类
package com.myapp.webapp.action
public class myOwnController implement org.springframework.web.servlet.mvc.Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception
{
Map<String, Object> model = new HashMap<String, Object>();
model.put("name", "davy jones");
return new ModelAndView("mytest", model);
}
}
调用jsp Ajax调用
function createFreshdeskUser(){
new Ajax.Request('${pageContext.request.contextPath}/mytest.html', {
method:'get',
onSuccess: function(transport) {
var divIdWordLength=16;
var htmlData=transport.responseText;
var startIndex=htmlData.indexOf("<div id=\"mydiv\">");
var endHtmlData=htmlData.substring(startIndex+divIdWordLength , htmlData.length);
var endIndex=endHtmlData.indexOf("</div>");
var finalHtmlData=endHtmlData.substring(0,endIndex);
var jsonObj=eval ("(" + finalHtmlData + ")");
alert(jsonObj.name);
},
onFailure: function() { alert('Something went wrong...'); }
});
}
mytest.jsp
<head>
</head>
<body>
<div id="mydiv">{'name':'${name}'}</div>
</body>
</html>