我想從JavaScript代碼(檢查用戶會話是否仍然活動)進行ajax調用。我希望我的代碼獨立於任何portlet,因此想要在javascript中構建url,而不必依賴portlet id。liferay是否可以獨立於portlet進行ajax調用?
這可能在MVCPortlet框架內嗎?如果沒有,是否有其他選擇?
在此行下面編輯。
我知道liferay的會話管理機制,實際上我已經設置了會話的自動擴展。但是,我的兩個用戶失去了長時間的輸入,因爲儘管有這種機制,但會話過期了(我相信他們中斷了他們的工作,而他們的電腦卻睡着了......)。
我想通過檢查某個會話是否仍處於活動狀態,然後從某些表單提交輸入之前避免出現這種情況。我這樣做的方式是預先提交一個ajax調用,我將在下面詳細介紹。
我的真正問題是:如何在該代碼中刪除對portletId的依賴,以便我不需要更改要在其中實現此機制的每個Portlet。
我今天就用下面的JavaScript函數:
Liferay.provide(window, "bb_checkSession",
function (sessionId, portletId, successCallback, failureCallback) {
var A = AUI();
var resourceUrl = Liferay.PortletURL.createResourceURL();
resourceUrl.setResourceId("CHECK_SESSION");
resourceUrl.setPortletId(portletId);
A.io.request(resourceUrl.toString(), {
method: 'GET',
cache: false,
on: {
success: function() {
var responseData = A.JSON.parse(this.get('responseData'));
if (responseData == null || sessionId != responseData.sessionId) {
if (failureCallback) failureCallback();
} else {
if (successCallback) successCallback();
}
},
failure: function() {
if (failureCallback) failureCallback();
}
}
});
},
['aui-io', 'liferay-portlet-url']
);
,並在我的portlet中,我處理呼叫如下
public void checkSession(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException {
PortletSession session = resourceRequest.getPortletSession();
JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
resourceResponse.setContentType("text/javascript");
jsonObject.put("sessionId", session.getId());
resourceResponse.getWriter().write(jsonObject.toString());
}
謝謝Vikas,Olaf,您的快速反應是有用的,但並不真正解決我的問題。我正在編輯我的帖子以澄清。 –