Возврат строки или HTML в запрос ajax с пружиной 2.5
Я использую Spring 2.5 (конфигурация на основе XML) . В моем контроллере Spring, как я могу вернуть строку обратно в мой запрос AJAX? Мой код Ajax выглядит следующим образом:
jq("#editAdTextSave").click(function() {
alert( "Handler for .click() called." );
jq.ajax({
url: 'bookingDetail.html',
type: 'POST',
data: 'action=updateAdText',
success: function(data) {
//called when successful
alert(model);
//$('#ajaxphp-results').html(data);
},
error: function(e) {
//called when there is an error
//console.log(e.message);
}
});
});
COntroller onSubmit требует возвращаемого значения объекта ModelAndView. Однако мне нужно только вернуть строку. Как я могу это сделать. Пожалуйста, предложите.
2 ответа
Вам нужно использовать @ResponseBody
в вашем методе отображения. С помощью @ResponseBody
напишет значение, к которому вы вернетесь HttpResponseBody
и не будет оцениваться как вид. Вот быстрое демо:
@Controller
public class DemoController {
@RequestMapping(value="/getString",method = RequestMethod.POST)
@ResponseBody
public String getStringData() {
return "data";
}
}
Как и в вопросе, Spring 2.5 используется; @ResponseBody
был представлен весной 3.0
@see ResponseBody JavaDocs последней весной
Вернуться к вопросу.
В моем контроллере Spring, как я могу вернуть строку...
Простой ответ в соответствии с сообщением Spring Blog, которое нужно добавить OutputStream
в качестве параметра для вашего метода контроллера.
Ваша конфигурация на основе XML должна выглядеть следующим образом
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="your.controllers"/>
</beans>
И ваш контроллер должен выглядеть так
package your.controllers;
@Controller
public class YourController {
@RequestMapping(value = "/yourController")
protected void handleRequest(OutputStream outputStream) throws IOException {
outputStream.write(
"YOUR DESIRED STRING VALUE".getBytes()
);
}
}
Наконец, если вы хотите сделать это без каких-либо аннотаций вообще, тогда;
Ваша конфигурация на основе XML должна выглядеть так
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/yourController" class="your.controllers.YourController"/>
</beans>
И ваш контроллер должен выглядеть так
package your.controllers;
public class YourController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.getOutputStream().write(("YOUR DESIRED STRING VALUE").getBytes());
return null;
}
}