Liferay Ajax без Jquery - PullRequest
       58

Liferay Ajax без Jquery

0 голосов
/ 01 февраля 2019

Я пытаюсь получить json из бэкэнда моего проекта liferay и не могу даже заставить serveResource напечатать что-нибудь на консоль.Так что мой запрос ajax ничего не делает в бэкэнде, но все равно вызывает успех.Я использую liferay 6.1.

Я пытался использовать jquery с $ .ajax, но там говорилось, что метод ajax не определен (даже при полной загрузке jquery-3.2.1), поэтому я думаю, что у jquery есть проблемы с несколькими включениями или что-то странное,Теперь я использую aui. Каждый раз, когда я реализую aui, он будет запускать функцию ajax и постоянно возвращать успех, даже если он никогда ничего не запускал на бэкенде и this.get ("responseData") имеет значение null

view.jsp:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>

<portlet:defineObjects />
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>


<portlet:resourceURL var="saveData" id="saveData" ></portlet:resourceURL>

<br/>

<aui:form>
          <aui:input type="text" name="Name" id="studentName"/>
          <aui:input type="text" name="Email" id="studentEmail"/>
          <aui:input type="text" name="ContactNo" id="studentPhone"/>
          <aui:button type="button" name="saveButton"  value="Save" onclick="save();" />
</aui:form>
<aui:script>
function save(){
    AUI().use('aui-base','aui-io-request', function(A){

        var name=A.one("#<portlet:namespace />studentName").get('value');
        var email=A.one("#<portlet:namespace />studentEmail").get('value');
        var contact=A.one("#<portlet:namespace />studentPhone").get('value');

         A.io.request('<%=saveData%>',{
             dataType: 'json',
             method: 'POST',
             data: { <portlet:namespace/>name: name,
                      <portlet:namespace/>email: email,
                      <portlet:namespace/>contact: contact},
             on: {
             success: function() {
                 var data=this.get('responseData');
                 alert("Success");
                 // Actions to be performed on success
                 }
             }
         });
    });
}
</aui:script>

Menu.java (бэкэнд):

import java.io.IOException;
import java.io.PrintWriter;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.ProcessAction;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;

/**
 * Portlet implementation class Menu
 */
public class Menu extends GenericPortlet {

    public void init() {
        viewTemplate = getInitParameter("view-template");
    }

    public void doView(
            RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {

        include(viewTemplate, renderRequest, renderResponse);
    }

    protected void include(
            String path, RenderRequest renderRequest,
            RenderResponse renderResponse)
        throws IOException, PortletException {

        PortletRequestDispatcher portletRequestDispatcher =
            getPortletContext().getRequestDispatcher(path);

        if (portletRequestDispatcher == null) {
            _log.error(path + " is not a valid include");
        }
        else {
            portletRequestDispatcher.include(renderRequest, renderResponse);
        }
    }

    protected String viewTemplate;


    private static Log _log = LogFactoryUtil.getLog(Menu.class);

    /**
     * Custom methods
     * @throws IOException 
     */

    @Override
    public void serveResource(ResourceRequest resourceRequest,
            ResourceResponse resourceResponse) throws IOException,
            PortletException {

        System.out.println("this will not print");
        PrintWriter out = resourceResponse.getWriter();
        out.println("This is sample Text");
    out.flush();    
    super.serveResource(resourceRequest, resourceResponse);
    }

    @ProcessAction(name="saveData")
    public void saveData(ResourceRequest resourceRequest,ResourceResponse resourceResponse){
        System.out.println("This won't print");
        String name = resourceRequest.getParameter("name");
        String emailId = resourceRequest.getParameter("email");
        String contact = resourceRequest.getParameter("contact");
     }    
}

Я бы хотел, чтобы моя функция serveResource возвращала JSON в мой файл .jsp с помощью ajax.

1 Ответ

0 голосов
/ 03 февраля 2019

Извините, но в вашем подходе много ошибок:

  • resourceURL управляет вызовом GET http (вы звоните с помощью POST)
  • resourceURL - не лучший способ выполнить сохранениеaction, вам нужен actionURL вместо этого (который возвращает ответ json)
  • ваше использование AUI().use('aui-base','aui-io-request' не лучший способ
  • Лучшим вариантом будет создание веб-службы JSON для выполнения вызова ajax:https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-1/json-web-services

Удачи

...