Я пытаюсь получить 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.