gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:37:47 26 4
gpt4 key购买 nike

我正在尝试在 AEM 6.1 上执行以下操作:

  • 开发一个简单的表单(3 个输入字段)
  • 处理提交的值,
  • 并使用处理后的值/结果重定向到同一页面

  • 我能够将值提交给 servlet,并处理它们(业务逻辑),并将结果提交给 requestparamter,以便我可以在 UI 上检索它们。但我坚持这些:
  • 重定向到同一页面
  • 并检索请求参数并使用 Sightly 显示它们。

  • 代码片段:
    小服务程序
    @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**");
    }
    }

    任何人都可以帮助 ho 在 posttest.html 中使用轻而易举地退出上述“结果”。

    最佳答案

    经过大量研究和多次试验,我终于让代码工作了。我不得不从 stackoverflow 的几个答案中获取相关信息。感谢所有作者。在这里发布我的解决方案对其他人有益。

    带有 Web 服务响应的结果表:

    enter image description here

    流程

  • 将表单数据提交给 Servlet 的 POST 方法
  • 在 Servlet 中,从请求中获取用户输入的值
  • 进行必要的网络服务调用。获取响应(json)
  • 我将响应 json 作为参数添加到请求
  • 使用 Wrapper,转发到需要的页面
  • 定义用于 Sightly 的 WCMUse 类。
  • 将“请求”分配给使用类并在那里进行处理
  • 使用从 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" 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>

    代码片段 - 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 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;

    @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 is SET with : "+this.rawJson);
    }
    }
    }

    public void setRawJson(String json) {
    this.rawJson = json;
    }

    public String getRawJson() {
    return this.rawJson;
    }
    }

    关于AEM 6.1 Sightly 基本表单提交并重定向到同一页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31454357/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com