2017-11-21 3 views
1

Ich habe ein POST-Servlet wie unten erstellt:AEM 6.3: Fehler beim POST Servlets Aufruf

Ich rufe das Servlet mit resource und Selektor-Servlet wird über ein Formular aufgerufen wird:

<div id = "sign-up" style ="padding-top:6%;padding-left:2%"> 
    <div> 
    <h1 style="font-size:2em">Subscribe to Newsletters</h1> 
    <form name = "subscriptionForm" method = "POST" action="/content/aemsite/en/subscribe.newsletters.html" id="subscriptionForm"> 
    <input type="text" name="name" id="name" placeholder="Name" style="margin-bottom:1%;width:30%"/> 
    <input type="text" name="email" id="email" placeholder="E-mail" style="margin-bottom:1%;width:30%"/> 

    <input type="submit" name="signup_submit" value="Sign me up" style="margin-bottom:3%"/> 
    </form> 
    </div> 

</div> 

dies ist die JavaScript-Datei, die wie enthalten ist

$(function() { 
    $('#subscriptionForm').submit(function(e) { 
     e.preventDefault(); //STOP default action 
     var formURL = $(this).attr("action"); 
     var method = $(this).attr("method"); 
     var name = $('#name').val(); 
     var email = $('#email').val(); 
     var form_data = $(this).serialize(); 
     console.log('inside subscription form '+form_data+' formURL '+formURL); 
     $.ajax({ 
      type:method, 
      url:formURL, 
      data: form_data, success:function(data){ 
       } 
     }); 
    }); 
}); 

clientlibs ich die jQu bin mit Die Lieferung erfolgt sofort mit AEM. Wenn ich das Formular abschicke, wirft es einige Fehler auf. Dies sind die Fehler, die ich sehe:

Failed to load resource: the server responded with a status of 500 (Server Error) 

Die oben ist der Fehler, den ich auf dem Chrom debuuger sehe. In der Datei error.log sehe ich diesen Fehler:

20.11.2017 22:13:42.802 *ERROR* [0:0:0:0:0:0:0:1 [1511234022796] POST /content/aemsite/en/subscribe.newsletters.html HTTP/1.1] org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing. 
javax.jcr.nodetype.ConstraintViolationException: No matching property definition: name = aemsite 

und

POST /content/aemsite/en/subscribe.newsletters.html HTTP/1.1] org.apache.sling.jcr.resource.internal.helper.JcrPropertyMapCacheEntry converToType: Cannot convert value of 2017/11/18 02:28:18 to class java.util.Calendar 
java.lang.IllegalArgumentException: Not a date string: 2017/11/18 02:28:18 

Es sieht aus wie die POST-Anforderung versucht, eine Eigenschaft zu speichern, aber im Servlet alles, was ich zu tun versuche, ist Ausgabe der Logger-Nachricht, die in der doPost-Methode des Servlets festgelegt wurde. Wenn ich den Anforderungstyp von POST zu GET ändere, verschwinden die Fehler und das Servlet wird aufgerufen.

Ich hatte gelesen, dass seit AEM 6 mehr Sicherheitsmaßnahmen für POST-Anfrage übernommen werden und daher ein CSRF-Token verwendet wird, aber es wird meist gehandhabt, wenn die AEM-Version von jQuery verwendet wird.

Ich bin mir nicht sicher, was ich falsch mache. Jede Hilfe wird geschätzt.

Vielen Dank im Voraus

UPDATE:

Ergebnis jcrresolver Mapping

enter image description here

+0

Haben Sie überprüft, ob die URL '/ content/aemsite/de/subscribe.newsletters.html' korrekt in Ihr Servlet aufgelöst wird? Sie können dies über die Resource Resolver Konsole '/ system/console/jcrresolver' überprüfen. Überprüfen Sie auch, ob Ihr Servlet aktiv ist. – rakhi4110

+0

Vielen Dank für die Antwort. Ich kann bestätigen, dass das Servlet aktiv ist und ich habe den Screenshot des Jcrresolvers angehängt. – user972418

Antwort

0

Wenn POST die Standard-POST-Servlet-ing genannt wird, aus irgendeinem Grund. Das ist deutlich sichtbar, da die ModifyOperation ausgeführt wird.

Ich schlage vor, dass Sie die Recent Requests console page verwenden, um zu sehen, wie Ihre Ressource identifiziert wird und wie das Skript aufgelöst wird.

0

Ich habe kürzlich herausgefunden, dass der Versuch, eine POST-Anfrage mit ResourceType zusammen mit OSGi zu tun, möglicherweise nicht funktioniert. Alles funktioniert gut, wenn ich POST mit Pfad angerufen habe. Ich habe OSGi DS und für einen GET-Aufruf mit ResourceType verwendet und es funktioniert gut, aber das Ändern in POST funktioniert nicht wirklich. Ich weiß nicht, ob das ein Fehler ist, aber das ist, was ich für jetzt schließen kann. Verwenden von Pfad ist die Möglichkeit, einen POST-Aufruf auszuführen.

0

Wenn Sie auf einen Pfad veröffentlichen, der in eine cq:Page aufgelöst wird, wird Ihr Servlet mit resourceType nicht aufgerufen.

Post zu - your_page_path/jcr:content Ihre Ressource basiert Servlet erhalten diese Anfrage ist

Auch hartzucodieren den Pfad zu verarbeiten nicht zu empfehlen.Was habe ich für solche Szenarien in Vergangenheit getan ist eine Komponente zu haben, in Ihrem Fall könnte man es nennen Abonnement-Komponente und die Form könnte wie gebucht werden -

<form action="${resource.path}.yourselector.html" method="post"> 

Und Ihre Servlet resource die Komponente sein.