i trying following on aem 6.1:
- develop simple form (3 input fields)
- process submitted values,
- and redirect same page processed values/result
i able submit values servlet, , process them (business logic), , result requestparamter can retrieve them on ui. stuck @ these:
- redirecting same page
- and retrieving request parameters , display them using sightly.
code snippets: servlet
@slingservlet( methods = { "post","get" }, name="com.tti.tticommons.service.servlets.leadtimetrendsservlet", paths = { "/services/processformdata" } ) public class tticommonservlet extends slingallmethodsservlet{ ... @override protected void dopost(slinghttpservletrequest request,slinghttpservletresponse response) throws servletexception,ioexception { string result; try { enumeration<string> parameternames = request.getparameternames(); map<string, string> formparametersmap = new hashmap<string, string>(); while (parameternames.hasmoreelements()) { paramname = parameternames.nextelement(); paramvalue = request.getparameter(paramname); ....... ....... } request.setattribute("result",result); response.sendredirect("/content/ttii/en/**posttest.html**"); } } can please on ho retireve above "result" in posttest.html using sightly.
after lot of research , several trials, had code working. had pick related info several answers in stackoverflow. authors. posting solution here beneficial others.
result form response webservice:

process flow
- submit form data servlet's post method
- in servlet, values entered user request
- make necessary webservice calls. response(json)
- i added response-json parameter request
- using wrapper, forward necessary page
- define wcmuse class use sightly.
- assign 'request' use-class , process there
- use assigned values use-class ui using sightly
code snippets - html
<form name="userregistrationform" method="post" action="/services/processformdata"> <input type="hidden" name=":redirect" value="posttest.html" /> <input type="submit" title="submit" class="btn submit btn-success" value="submit" tabindex="25" name="bttnaction"> <div data-sly-use.model="${'com.abccommons.service.helpers.postservicehelper' @ slingreq=request }"> **${model.getrawjson}** </div> code snippets - servlet
@slingservlet( label = "abc - common servlet", metatype = true, methods = { "post" }, name="com.abccommons.service.servlets.abcpostservlet", paths = { "/services/processformdata" } ) public class abcpostservlet extends slingallmethodsservlet{ @override protected void dopost(slinghttpservletrequest request,slinghttpservletresponse response) throws servletexception,ioexception { log.info("\n\n----- abcpostservlet post: "); string paramname; string paramvalue; string osgiservice=""; try { enumeration<string> parameternames = request.getparameternames(); map<string, string> formparametersmap = new hashmap<string, string>(); while (parameternames.hasmoreelements()) { paramname = parameternames.nextelement(); paramvalue = request.getparameter(paramname); if (paramname.equals("osgiservice")) { osgiservice = paramvalue; } else if (paramname.equals(":cq_csrf_token")) { //todo: don't add map } else if (paramname.equals("bttnaction")) { //todo: dont' add map } else { //log.info("\n---paramname="+paramname+", value="+paramvalue); formparametersmap.put(paramname, paramvalue); } } string parametersinjson = jsonhelper.tojson(formparametersmap); log.info("\n\n----------- post paramters in json="+parametersinjson); string json = webservicehelper.getjson(osgiservice, parametersinjson, request, response); log.info("\n\n----------- post json web service="+json); request.setattribute("jsonresponse",json); //string redirectpage = request.getparameter(":redirect"); //requestdispatcher dispatcher = request.getrequestdispatcher("/content/en/"+redirectpage); requestdispatcher dispatcher = request.getrequestdispatcher("/content/en/postformtest.html"); getrequest getrequest = new getrequest(request); dispatcher.forward(getrequest, response); } catch (exception e) { log.error("slingservlet failed while retrieving resources"); } { //todo } } /** wrapper class return aem process request/response get. */ private static class getrequest extends slinghttpservletrequestwrapper { public getrequest(slinghttpservletrequest wrappedrequest) { super(wrappedrequest); } @override public string getmethod() { return "get"; } } code snippets - postservicehelper - wcmuse class
public class postservicehelper extends wcmuse { protected final logger log = loggerfactory.getlogger(postservicehelper.class); private slinghttpservletrequest httprequest; private string rawjson; @override public void activate() throws exception { log.info("\n\n========= postservicehelper.activate():"+get("slingreq", slinghttpservletrequest.class)); this.httprequest = get("slingreq", slinghttpservletrequest.class); //this.resourceresolver = getresourceresolver(); //log.info("\n\n========= getrequest()="+getrequest()); slinghttpservletrequest trequest; set<string> keys = new hashset<string>(); enumeration<?> attrnames = this.httprequest.getattributenames(); while (attrnames.hasmoreelements()) { string attr = (string) attrnames.nextelement(); //log.info("\n--- key="+attr); if (attr.equals("jsonresponse")) { this.setrawjson((string)this.httprequest.getattribute(attr)); //log.info("\n---rawjson set : "+this.rawjson); } } } public void setrawjson(string json) { this.rawjson = json; } public string getrawjson() { return this.rawjson; } }
Comments
Post a Comment