Stripers, I've run into a problem for which I found a simple but somewhat ugly solution. I'm trying to find a more elegant solution that doesn't increase complexity tenfold.
Consider a page with a list of people in a div id="people" and a form, in the same page, in a div id="form". The form gets submitted via AJAX. If no validation errors occur, the response is the fragment that contains the refreshed list of people and should replace the "people" div. Validation errors return the form, much like the standard Stripes source page resolution except that it's just the form, not the entire page. In that case, the response fragment should replace the "form" div. The problem consists of receiving the page fragment and deciding where it should go: "people" or "form"? In other words, how would you signal, in the response, a success/validatione error flag along with the page fragment? To be clear and save everyone time, allow me to enumerate some solutions that do not satisfy my requirements: - returning an HTTP error code. When validation errors occur, the HTTP status is still successful and the page fragment is valid; it contains the form with the validation errors. - using JavaScriptResolution, JSON, XML data, etc. I do not want to send raw data and have to rebuild the list of people or the form with validation errors using JavaScript. That makes me feel like I'm back in 1998, writing HTML code in Java Servlets. I want to send the page fragments in the response, clean and simple. - setting an HTTP response header. I tried this and correct me if I'm wrong, but setting a response header and then returning a ForwardResolution does not work. I've also had some difficulty retrieving the response header in the AJAX callback function (with jQuery). I should mention that I'm open to this solution but I haven't found how to resolve these issues. Right now I have an HTML comment in the list of people fragment. When receiving the response data, finding that comment in the data means success, and so put the fragment in "people". Otherwise, put the fragment in "form". Like I said: simple, but ugly. I also tried returning a JavaScriptResolution(url) upon success and the form with validation errors upon failure. If eval(response) works, I use the URL to refresh the list of people. This is similar to a redirect. Not bad, but I have to do a try/catch on the call to eval() because the HTML fragment with the form is obviously not valid JavaScript. So I find this solution almost as brittle as the previous one. If I return a JavaScriptResolution(true, url) on success and JavaScriptResolution(false, url) upon failure, I'd have to submit the form a second time, with some kind of indicator, to get the Stripes- generated form with validation errors. Somewhat a steep price to pay for elegance... Ideally, I would love to be able to just return a JavaScriptResolution (or JSON, whatever) with a simple Map: {"success": true, "data": "(html fragment)"} Then I could just check the flag to decide which div id to update with the data. The HTML page fragment, however, would have to be generated normally. That's the problem. I tried to executing a ForwardResolution with an HttpServletResponseWrapper to capture the output in a String, and put that in the JavaScriptResolution. Surprisingly complicated, and it doesn't even work. Jetty complains of an "already committed response" (even if I override isCommitted() to return false) and Tomcat throws an InvalidStateException. Even if I somehow got that to work, it feels like a hack-hack-ack-ack. If you're still with me, it all boils down to: how to elegantly attach some sort of additional data (in my case, a boolean flag) to a regular Stripes Resolution? Thanks in advance for any ideas on this. Cheers, Freddy ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ Stripes-users mailing list Stripes-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/stripes-users