Liferay的文檔:
爲您在portlet想你可以有很多的動作。實施每個 一個作爲接收兩個參數的方法:ActionRequest
和 ActionResponse
。將方法命名爲任何您想要的,但請注意,方法名稱必須與指向它的URL名稱匹配。
因此,基於合適的JSP,動作和腳本結構,您可以在單個portlet中放置儘可能多的actionURL。重要的一點是將URL標記上指定的name
屬性的值與方法名稱相匹配。
如果您指定了name屬性,那麼您需要在偵聽器類中實現單獨的操作方法。
模式1:
看,你actionURLs將類似於以下內容:
<portlet:actionURL var="shutdownRebootURL" name="shutdownReboot">
<portlet:param name="action" value="shutdown-reboot" />
</portlet:actionURL>
<portlet:actionURL var="wakeupURL" name="wakeup">
<portlet:param name="wakeaction" value="wakeup" />
</portlet:actionURL>
所以,你的行動slass應該包含以下方法:
public void shutdownReboot(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
// Your shutdownReboot logic goes here
}
public void wakeup(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
// Your wakeup logic goes here
}
然而,沒有硬n快的需要放置兩個表單/ actionURL,您可以通過在偵聽器c中實現一個動作方法來實現您的要求根據參數的值進行過濾。 在每個操作上,該參數將標識哪個操作已被調用。
圖案2:
考慮下面的例子:
HTML:
<form action="<portlet:actionURL />" method="post">
<input type="hidden" name="action" id="action" value="" />
<table>
<tr>
<td>shutdown checkbox</td>
<td>reboot checkbox</td>
<td>wakeup checkbox</td>
</tr>
<tr>
<td>
<!-- show specific button based on checkbox checked -->
<button type="submit" id="shutdownReboot" onclick="startActions('shutdownReboot');">Shutdown/Reboot</button>
<button type="submit" id="wakeup" onclick="startActions('wakeup');">Wakeup</button>
</td>
</tr>
</table>
</form>
使用Javascript:
function startActions(action) {
document.getElementById('action').value = action;
/* set other required parameters */
}
操作方法:
String action = "";
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
if(actionRequest.getParameter("action") != null && actionRequest.getParameter("action") != ""){
action = actionRequest.getParameter(action);
}
if(action.equals("shutdownReboot")){
// shutdown-reboot logic
}else if(action.equals("wakeup")){
// wakeup logic
}else{
// default logic
}
}
爲什麼,有沒有嚴格的需要放置兩個形式?雖然你可以使用單個實現這個! – 2015-04-02 14:33:10
比方說,我開始研究一個已經實現了從一個actionURL調用方法的項目......最簡單的方法是實現另一個方法,從另一個actionURL調用,以避免重新實現第一個方法並將後端代碼調用分爲兩個控制器方法,但是我想從portlet中的一個jsp頁面調用此方法。 – 2015-04-02 15:34:17
我有一個想法,將這個jsp頁面分割成單獨的jsps,每個jsp都有actionURL,然後只是簡單地將一個jsp包含到另一個jsp中,不知道它是否可以工作,但可以在明天嘗試。 – 2015-04-02 15:41:24