>开发一个简单的表格(3个输入字段)
>处理提交的值,
>并使用已处理的值/结果重定向到同一页面
我能够将值提交给servlet,并处理它们(业务逻辑),并将结果提交给requestparamter,以便我可以在UI上检索它们.但我坚持这些:
>重定向到同一页面
>并检索请求参数并使用Sightly显示它们.
代码片段:
Servlet的
@SlingServlet(methods = { "POST","GET" },name="com.tti.tticommons.service.servlets.LeadTimeTrendsServlet",paths = { "/services/processFormData" })public class TTICommonServlet extends SlingallMethodsServlet{ ...@OverrIDeprotected 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**"); }}
任何人都可以帮助你在posttest.HTML中使用sightly退出上述“结果”.
解决方法 经过大量的研究和几次试验,我终于让代码工作了.我不得不从stackoverflow中的几个答案中获取相关信息.感谢所有作者.在这里发布我的解决方案对其他人有益.来自webservice的结果表格:
流程
>将表单数据提交给Servlet的POST方法
>在Servlet中,获取用户从请求中输入的值
>进行必要的Web服务调用.得到回复(Json)
>我将response-Json添加为请求的参数
>使用Wrapper,转到必要的页面
>定义WCMUse类以与Sightly一起使用.
>将“请求”分配给Use-class并在那里处理它
>使用从Use-class到UI的指定值
代码片段 – HTML
<form name="userRegistrationForm" method="post" action="/services/processFormData"><input type="hIDden" name=":redirect" value="posttest.HTML" /><input type="submit" title="submit" value="submit" tabindex="25" name="bttnAction"><div data-sly-use.model="${'com.abccommons.service.helpers.postserviceHelper' @ slingreq=request }">**${model.getRawJson}**</div>
代码片段 – Servlet
@SlingServlet(label = "ABC - Common Servlet",Metatype = true,methods = { "POST" },name="com.abccommons.service.servlets.ABCpostservlet",paths = { "/services/processFormData" })public class ABCpostservlet extends SlingallMethodsServlet{ @OverrIDeprotected voID doPost(SlinghttpServletRequest request,IOException { log.info("\n\n----- ABCpostservlet POST: "); String paramname; String paramValue; String osgiService=""; try { Enumeration<String> parameternames = request.getParameternames(); Map<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 to the map } else if (paramname.equals("bttnAction")) { //Todo: dont' add to the 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 from 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"); } finally { //Todo } }/** Wrapper class to always return GET for AEM to process the request/response as GET. */private static class GetRequest extends SlinghttpServletRequestWrapper { public GetRequest(SlinghttpServletRequest wrappedRequest) { super(wrappedRequest); } @OverrIDe public String getmethod() { return "GET"; }}
代码片段 – postserviceHelper – WCMUSe类
public class postserviceHelper extends WCMUse {protected final Logger log = LoggerFactory.getLogger(postserviceHelper.class);private SlinghttpServletRequest httpRequest;private String rawJson;@OverrIDepublic 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 is SET with : "+this.rawJson); } }} public voID setRawJson(String Json) { this.rawJson = Json;} public String getRawJson() { return this.rawJson;}}总结
以上是内存溢出为你收集整理的AEM 6.1提交基本表单并重定向到同一页面全部内容,希望文章能够帮你解决AEM 6.1提交基本表单并重定向到同一页面所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)