Few days ago I was working on some application, and needed to update some values in my JSP using Ajax. I decided to use XML as an Ajax response, parse it and do whatever I want with it...
In this post I will show you how to make Struts2 return XML as an Ajax response.
Here is an example of how you can do this:
public class CustomAction extends ActionSupport { public HttpServletResponse getResponse() { return ServletActionContext.getResponse(); } @Override public String execute() throws Exception { PrintWriter printWriter = null; getResponse().setContentType("text / xml;charset = UTF-8"); getResponse().setHeader("Cache - Control", "no - cache"); StringBuffer sb = new StringBuffer(""); // let's say you have A Movie object "movie" that needs to be represented as XML try { printWriter = getResponse().getWriter(); sb.append(" "); printWriter.print(sb.toString()); } catch (IOException e) { e.printStackTrace(); throw e; } finally { printWriter.close(); printWriter = null; } return NONE; } }" + movie.getDirector() + " "); sb.append("" + movie.getLanguage() + " "); sb.append("" + movie.getYear() + " "); sb.append("
And that's it! Just create a PrintWriter, adjust some values in response and print your XML.
And now, in your JavaScript, you can parse this xml and do something with it:
directors=xmlhttp.responseXML.documentElement.getElementsByTagName("director"); languages=xmlhttp.responseXML.documentElement.getElementsByTagName("language"); years = xmlhttp.responseXML.documentElement.getElementsByTagName("year"); director = directors[0].firstChild.nodeValue; language = languages[0].firstChild.nodeValue; year = years[0].firstChild.nodeValue; document.getElementById('director').value=director; document.getElementById('language').value=language; document.getElementById('year').value=year;
That's it.
I hope I helped someone...