2016-10-22 105 views
0

我有一个简单的portlet,它返回一个JSON对象。这里的portlet的代码:在Liferay 7中调用portlet

package example.portlet; 

@Component(
    immediate = true, 
    property = { 
     "com.liferay.portlet.display-category=category.sample", 
     "com.liferay.portlet.instanceable=true", 
     "javax.portlet.display-name=Example Portlet", 
     "javax.portlet.init-param.template-path=/", 
     "javax.portlet.init-param.view-template=/view.jsp", 
     "javax.portlet.resource-bundle=content.Language", 
     "javax.portlet.security-role-ref=power-user,user" 
    }, 
    service = Portlet.class 
) 
public class ExamplePortlet extends MVCPortlet { 

    @Override 
    public void serveResource(ResourceRequest request, ResourceResponse response) throws IOException, PortletException { 
     ... 
    } 
} 

我想打电话给使用A.io.request从现有的JavaScript是门户模块之外此portlet。我怎样才能做到这一点?我应该提供什么网址?

回答

1

一个portlet具有一个URL,它取决于页面上的页面和潜在的页面,因为它可以多次添加到页面中。因此,人们无法真正了解“该”网址。如果这是正确的portlet代码,则应该将其调用或至少URL解析封装在portlet中。否则,它可能需要位于一个servlet中,或者甚至两者中(例如,在由servlet和portlet调用的库中)。

+0

这非常有道理。特别是因为你声明你的portlet是无法实现的。尽管您可以获取URL,但它们通常是与portlet本身相关的操作。你也可以尝试友好的URL,但我认为这个答案可能是足够的,servlet或struts动作可能会有所帮助。以下是struts操作的示例:https://www.e-systems.tech/blog/-/blogs/strutsaction-in-liferay-7 – Victor

0

正如Olaf所指出的那样,您不会获得到portlet的URL。您可以获取某个服务器实例中某个站点某个页面上放置的Portlet实例的URL。

如果您只是想要提供JSON的服务(不管页/网站/实例如何),则无需为其编写portlet。您只需写出Liferay会为您服务的宁静服务。一个例子可以发现here