对于Adobe Experience Manager中的URL参数未传递给表单的问题,可以通过以下代码示例解决:
package com.example.core.servlets;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.apache.sling.servlets.annotations.SlingServletSelector;
import org.apache.sling.servlets.annotations.SlingServletExtensions;
import org.osgi.framework.Constants;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.Servlet;
import org.osgi.service.component.annotations.Component;
@Component(service = Servlet.class, property = {
Constants.SERVICE_DESCRIPTION + "=Servlet to handle form submission",
"sling.servlet.methods=" + "GET",
"sling.servlet.resourceTypes=" + "sling/servlet/default",
"sling.servlet.selectors=" + "handleForm",
"sling.servlet.extensions=" + "html"
})
@SlingServletResourceTypes(
resourceTypes = "cq/Page",
methods = "GET",
selectors = "handleForm",
extensions = "html"
)
@SlingServletSelector(name = "handleForm")
@SlingServletExtensions(extension = "html")
public class MyFormServlet extends SlingSafeMethodsServlet {
private static final String PARAMETER_NAME = "myParam";
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
// 获取URL中的参数值
String paramValue = request.getParameter(PARAMETER_NAME);
// 如果参数值不为空,将其传递给表单
if (StringUtils.isNotEmpty(paramValue)) {
request.setAttribute(PARAMETER_NAME, paramValue);
}
// 进行其他操作,例如获取表单数据并进行处理
// ...
// 渲染表单页面
// ...
}
}
在上述示例代码中,我们创建了一个名为MyFormServlet
的自定义Servlet,在doGet
方法中处理表单的GET请求。首先,我们从URL中获取myParam
参数的值,并将其传递给表单,以便在表单页面中使用。然后,可以进行其他操作,例如获取表单数据并进行处理。最后,可以根据需要渲染表单页面。
要使用此代码示例,您需要在AEM项目中创建一个新的Java类,并将代码粘贴到该类中。然后,将类打包为OSGi bundle,并将其部署到AEM实例中。完成后,您可以在适当的页面上添加适当的URL参数,以便将参数值传递给表单。