【问题标题】:How to post a form in Adobe CQ 5.5?如何在 Adob​​e CQ 5.5 中发布表单?
【发布时间】:2014-03-07 01:58:28
【问题描述】:

我对 CQ 很陌生,我已经为此苦苦挣扎了很长时间。我想要做的是“创建一个使用常规标签接受用户名密码并将数据发布到 servlet 的页面。

servlet 使用硬编码的 str.equals("username") 检查用户名密码并重定向到另一个页面,即成功或失败" 请注意,我正在构建一个拥有普通用户的网站,例如“注册到诸如 stackoverflow 等网站的人”这些用户不是可以编辑内容的不是作者。 一个非常基本的任务,但对我来说太难了。这是代码。 我使用 CRXDE 创建的捆绑包成功编写了 sling Post servlet

package com.example;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(immediate=true, metatype=false, label="EXAMPLE SERVLET")
@Service
@Properties(value = {   
        @org.apache.felix.scr.annotations.Property(name="sling.servlet.methods", value={"POST"}),
        @org.apache.felix.scr.annotations.Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}),
        @org.apache.felix.scr.annotations.Property(name="sling.servlet.selectors", value={"SELECTORNAME"}),
        @org.apache.felix.scr.annotations.Property(name="sling.servlet.extensions", value={"html"})
})
public class ExampleServlet extends SlingAllMethodsServlet {
    private static final Logger log = LoggerFactory.getLogger(ExampleServlet.class);
    private static final long serialVersionUID = 1L;

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        //String redirect = request.getParameter(":redirect");

        log.info("The Sling Post Servlet- Example Servlet has been called !! ");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if(username.equals("oliver")&& password.equals("oliver"))
        {
            response.sendRedirect("/content/mywebsite/en/products");
        }
        else
        {
            response.sendRedirect("/content/mywebsite/en/services");
        }
        log.info("Sucessfull Response Sent ");
    }

} 

I get error as 
Status  
200
Message 
OK
Location    /example.SELECTORNAME.html
Parent Location /
Path    
/example.SELECTORNAME.html
Referer http://localhost:4502/content/mywebsite/en/products.html
ChangeLog   
<pre>modified("/example.SELECTORNAME.html/username");<br/

而jsp如下

<%--

  My Content Page Componenet component.

  General Description

--%><%
%><%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" %>

<%
%><%
    // TODO add you code here
%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<cq:include script="head.jsp"/>



<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My title</title>
</head>
<body>

<div>My First Page </div>
<form action="/example.SELECTORNAME.html" method="POST">
<input type="text" name ="username"/>
<input type="password" name "password"/>
<input type="submit" value="Login"/>

</form> 

</body>
</html>

提前致谢!!

【问题讨论】:

  • 如果您的 servlet 处于活动状态,您能否检查 osgi 组件列表? (/系统/控制台/组件)。似乎常规的 POST servlet 正在处理请求
  • ExampleServlet 处于活动状态......我检查过了!

标签: aem jcr sling


【解决方案1】:

您的文件中缺少 Servlet 路径。 /** * @scr.component 元类型=“假” * @scr.service 接口="javax.servlet.Servlet" * @scr.property name="sling.servlet.paths" values="/bin/login" */ 公共类 LoginServlet 扩展 SlingAllMethodsServlet { …… }

jsp-

form name="frmLogin" id="frmLogin" method="post" action="/bin/login"

【讨论】:

猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多