在portlet JSP中,我需要生成一系列AcctionURL,它们通过一组值来表达。
以下代码中的所有内容都可以,我曾用它来渲染RenderURL系列:
<%
PortletURL manageReportURL = renderResponse.createRenderURL();
manageReportURL.setParameter("jspPage", "/html/ManageDossier/manageReport.jsp");
manageReportURL.setParameter("dossierEntryIds", primKey);
manageReportURL.setParameter("redirect", rowURL);
for (int w = 0; w < csApps.size(); w++) {
manageReportURL.setParameter("csAppReportId", String.valueOf(csApps.get(w).getCompanyStudioAppId()));
%>
<liferay-ui:icon image="category" message="<%= csApps.get(w).getDescription() %>" url="<%= manageReportURL.toString() %>" />
<%
}
%>
我使用了与ResourceURL相同类型的代码,一切正常:
<%
ResourceURL serveResourceURL = renderResponse.createResourceURL();
serveResourceURL.setParameter("dossierId", primKey);
for (int n = 0; n < csAppsNoParms.size(); n++) {
serveResourceURL.setParameter("csAppReportId", String.valueOf(csAppsNoParms.get(n).getCompanyStudioAppId()));
%>
<liferay-ui:icon image="print" message="<%= LanguageUtil.get(themeDisplay.getLocale(), \"print\") + StringPool.SPACE + csAppsNoParms.get(n).getDescription() %>" url="<%= serveResourceURL.toString() %>" />
<%
}
%>
但是当我为ActionURL做同样的事情时,我没有错误,但我的动作代码从未被执行 - 只是没有做任何事情:
<%
PortletURL notifyDossierToDittaURL = renderResponse.createActionURL();
notifyDossierToDittaURL.setParameter("resourcePrimKey", primKey);
notifyDossierToDittaURL.setParameter("redirect", rowURL);
for (int n = 0; n < msgContentToDittaCodes.length; n++) {
notifyDossierToDittaURL.setParameter("msgContentCod", msgContentToDittaCodes[n]);
%>
<liferay-ui:icon image="news" message="<%= LanguageUtil.get(themeDisplay.getLocale(), \"send\") + StringPool.SPACE + msgContentToDittaCodes[n] %>" url="<%= notifyDossierToDittaURL.toString() %>" />
<%
}
%>
请问,任何人都可以看到上面的createRenderURL()和createActionURL()之间的区别吗?
或者让我根据一系列值生成一系列ActionURL?
提前谢谢你, 伊万诺C.
答案 0 :(得分:0)
当你使用Liferay的MVCPortlet时,我假设你的portlet代码中有不同的'action'方法 - 每个方法都有不同的名称。您的代码似乎不允许MVCPortlet知道要调用的操作方法。您需要在代码中添加以下行:
String actionName = "yourMvcPortletActionMethodName";
notifyDossierToDittaURL.setParameter(ActionRequest.ACTION_NAME, actionName);
有一种更好的方法可以在portlet JSP中创建ActionURL:
<portlet:actionURL var="notifyDossierToDittaURL" name="yourMvcPortletActionMethodName"></portlet:actionURL>
与JSP中的scriptlet相比,我建议使用上述语法。