Ajax-вызов в портлете Liferay 6.2
Я новичок в Liferay, и я хотел бы сделать вызов ajax. Что я делаю: - У меня есть кнопка На странице jsp, чтобы сделать вызов ajax, переменная инициализируется в коде javascript и увеличивается каждый раз, когда пользователь нажимает кнопку. эта переменная передается на сервер для использования в качестве параметра функции.
Фрагмент кода
aui_ajax.jsp:
<input type="button" value = "Ajouter un projet" onClick="<portlet:namespace/>Test();return false;">
<div id="usersTable">
<input type="button" value = "Ajouter un projet" onClick=" <portlet:namespace/>Test();return false;">
</div>
<div id="wait" style="display:none; width: 69px; height: 89px; border: 1px solid black; position: absolute; top: 50%; left: 50%; padding: 2px;">
<img src='http://www.w3schools.com/jquery/demo_wait.gif' width="64" height="64" /> <br>Loading..
</div>
<script>
var i=1
function <portlet:namespace/>Test() {
var i=1;
AUI().use('aui-base','aui-io-request', function(A){
i++;
A.one('#wait').setStyle('display', 'block');
var allRows=A.one('#usersTable').getHTML();
var querystring = 'message:' + '1';
//aui ajax call to get updated content
A.io.request('<%=updaContentURL%>',{
dataType: 'json',
method: 'GET',
data: querystring,
on: {
success: function() {
var data=this.get('responseData');
A.Array.each(data, function(obj, idx){
var tableRow=obj.firstName;
//allRows=allRows.trim()+tableRow.trim();
//A.one('#usersTable').empty();
//A.one('#usersTable').setHTML(tableRow.trim());
A.one('#usersTable').append(tableRow.trim());
A.one('#wait').setStyle('display','none');
});
}
}
});
});
}
</script>
ContentAutoUpdateAction.java
public class ContentAutoUpdateAction extends MVCPortlet {
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
try {
System.out.println("====serveResource========");
JSONObject jsonUser=null;
JSONArray usersJsonArray=JSONFactoryUtil.createJSONArray();
resourceRequest.getParameter("message");
int i=Integer.parseInt(message);
i++;
System.out.println(i);
//}
PrintWriter out=resourceResponse.getWriter();
System.out.println(usersJsonArray.toString());
out.print(usersJsonArray.toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
проблема в том, что я не могу получить параметр "message" в ContentAutoUpdateAction.java
3 ответа
Хотя старый вопрос, но хотел ответить.
Вы должны включить ajax для портлета.
<ajaxable>true</ajaxable>
внутри liferay-portlet.xml
Во-вторых, вы можете передать параметр в ajax, используя
data: {
paramName1: paramValue,
paramName2: paramValue2
}
Если вы хотите объединить его как строку запроса, вы можете использовать
var ajaxURL = "<portlet:resourceURL/>";
ajaxURL = ajaxURL + "&message=1";
а затем используйте ajaxURL для URL-адреса запроса ajax.
Информация, которую я услышал, это то, что это известная ошибка. Я знаю обходной путь:
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(resourceRequest);
param = PortalUtil.getOriginalServletRequest(httpReq).getParameter("name");
Надеюсь, поможет.
Не уверен насчет этого:
var querystring = 'message:' + '1';
Вы создаете строку запроса GET, поэтому я бы изменил ее на:
var querystring = '&message=' + '1';
Кроме того, это не единственный способ передачи параметров в запрос ajax, вы также можете попробовать этот способ:
A.io.request('<%=updaContentURL%>',{
dataType: 'json',
method: 'POST',
data: {message: '1'}