AEM 6.1提交基本表单并重定向到同一页面

AEM 6.1提交基本表单并重定向到同一页面,第1张

概述我想在AEM 6.1上做以下事情: >开发一个简单的表格(3个输入字段) >处理提交的值, >并使用已处理的值/结果重定向到同一页面 我能够将值提交给servlet,并处理它们(业务逻辑),并将结果提交给requestparamter,以便我可以在UI上检索它们.但我坚持这些: >重定向到同一页面 >并检索请求参数并使用Sightly显示它们. 代码片段: Servlet的 @SlingServl 我想在AEM 6.1上做以下事情:

>开发一个简单的表格(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提交基本表单并重定向到同一页面所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1070039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存