Liferay Delegate Servlet无法访问liferay实用程序bean

时间:2017-11-13 07:52:51

标签: java spring servlets liferay

我正在尝试在Liferay中构建一个委托servlet,需要知道Liferay中已连接用户的列表(使用com.liferay.portal.service.UserLocalServiceUtil)

我在Liferay中部署了一个简单的委托servlet并且说Hello时没有问题,但是当我尝试使用UserLocalServiceUtil时,我得到了这个异常

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'com.liferay.portal.service.UserLocalService' is defined

阅读文档似乎代理服务器可以访问核心门户实用程序,但我可能是错的。任何帮助或建议将不胜感激。

这是servlet

package mycompany.liferay;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.service.UserServiceUtil;
import com.liferay.portal.model.User;
import java.util.List;

public class myDelegateServlet extends HttpServlet {

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

       try {

            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>My delegate Servlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>My delegate Servlet at " + request.getContextPath() + "</h1>");

            int userCount = UserLocalServiceUtil.getUsersCount();
            List<User> users = UserLocalServiceUtil.getUsers(0, userCount);

            out.print("<br>Connected Users:<br>");
            for (User user : users) 
              {
               out.print("<li>User: "+user.getUserId()+"</li>" );   
              }

            out.println("</body>");
            out.println("</html>");

        } 
        catch (Exception e) 
            {
             out.print("Exception! "+e.getMessage() );   
             }          
        finally {
            out.close();
        }
    }
...

以及它在web.xml上的定义

<servlet>
    <servlet-name>myDelegateServlet</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class>
    <init-param>
        <param-name>servlet-class</param-name>
        <param-value>mycompany.liferay.myDelegateServlet</param-value>
    </init-param>
    <init-param>
        <param-name>sub-context</param-name>
        <param-value>myDelegateServlet</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>  

1 个答案:

答案 0 :(得分:1)

看看这个示例servlet。 https://github.com/liferay/liferay-blade-samples/tree/master/gradle/extensions/servlet。您提到的方法更适用于6.2版本。

然后,当您拥有OSGi组件时,您可以轻松注入服务。

@Reference
private UserLocalService servcie;

您需要具有依赖关系org.osgi:org.osgi.service.component.annotations:1.3.0

或者看一下JAX-RS接口