Portlet JSP:如何基于值数组创建一系列ActionURL

时间:2015-01-19 21:15:32

标签: jsp liferay portlet

在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.

1 个答案:

答案 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相比,我建议使用上述语法。