如何调试错误“未找到MVC渲染命令名的渲染Map”

vojdkbi0  于 2022-10-22  发布在  Java
关注(0)|答案(2)|浏览(130)

我正在为我的Liferay DXP开发一个模块,我正在努力调用我的renderCommand。
在初始渲染时以及每当我尝试单击指向RenderCommand的链接时,都会出现以下错误消息:
未找到portlet com_company_tools_manager_documents_web_portlet_documents portlet的MVC呈现命令名“/document-management/document/edit”的呈现Map
我有我的“view.jsp”,其中包含我的“init.jsp”、renderURL的创建和链接:

<%@ include file="./init.jsp" %>

    <portlet:renderURL var="editDocumentURL">
        <portlet:param name="mvcRenderCommandName" value="<%=MVCCommandNames.EDIT_DOCUMENT %>" ></portlet:param>
    </portlet:renderURL>

<a href="${ editDocumentURL }">edit documents</a>

“MVCCommandNames.EDIT_DOCUMENT”是指MVCComandNames.java:

package com.company.tools.manager.documents.web.constants;

public class MVCCommandNames {
    public static final String EDIT_DOCUMENT= "/document-management/document/edit"; }

我将该文件包含在“init.jsp”中,如下所示:

<%@ page
    import="com.company.tools.manager.documents.web.constants.MVCCommandNames"%>

最后,我有一个“EditDocumentMVCRenderCommand.java”,它应该被视为一个组件,并连接到链接:

package com.company.tools.manager.documents.web.portlet.action;
import com.company.tools.manager.documents.web.constants.DocumentsPortletKeys;
import com.company.tools.manager.documents.web.constants.MVCCommandNames;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand;
import org.osgi.service.component.annotations.Component;

@Component(immediate = true, property = { "javax.portlet.name=" + DocumentsPortletKeys.DOCUMENTS,
        "mvc.command.name=" + MVCCommandNames.EDIT_DOCUMENT}, service = MVCRenderCommand.class)
public class EditDocumentMVCRenderCommand implements MVCRenderCommand { (...) }

由“DocumentsPortletKeys.DOCUMENTS”调用的portlet名称由定义

package com.company.tools.manager.documents.web.constants;

public class DocumentsPortletKeys {

    public static final String DOCUMENTS= "com_company_tools_manager_documents_web_portlet_DocumentsPortlet";
}

我忘记连接一些东西了吗?如何找到“EditDocumentMVCRenderCommand.java”所侦听的URL?关于如何处理这个问题还有其他建议吗?
问候语

pqwbnv8z

pqwbnv8z1#

我也遇到了同样的问题,并通过创建一个新的mvc模块来解决这个问题,只需使用最少的代码量(只包括您在本文中共享的文件),并尝试将重点放在渲染Map上。此外,如果您可以共享您的DocumentsPortlet。java验证“javax.portlet.name”属性是否正确。

sczxawaw

sczxawaw2#

“未找到MVC渲染命令名的渲染Map”表示没有**表示渲染命令的JSP文件。
要使用MVC渲染命令,您需要以下内容:

  • MVCRenderCommand接口的实现。
  • 视图层中的portlet呈现URL。
  • 发布MVCRenderCommand服务的组件,具有两个属性

在您的例子中,您缺少一个“render”jsp文件。在EditDocumentMVCRenderCommand中,它应该实现如下:

@Override
public String render(
    RenderRequest renderRequest, RenderResponse renderResponse) {

    return "/edit/document.jsp";
}

您应该在路径中使用“/edit/document.jsp”,否则它将抛出您正在经历的错误。

相关问题