2017-11-13 3 views
0

Ich versuche, einen Delegaten Servlet in Liferay zu bauen, der die Liste der verbundenen Benutzer in Liferay (mit com.liferay.portal.service.UserLocalServiceUtil)Liferay Delegierter Servlet kann nicht auf liferay Dienstprogramm Bohnen

ich wissen muss, hatte kein Problem, ein einfaches delegierte Servlet immer Hallo zu arbeiten und sagen, wenn sie in Liferay eingesetzt, aber wenn ich versuche UserLocalServiceUtil ich diese Ausnahme

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

Lese docs bekommen zu verwenden, scheint es, dass ein Delegierter Server Core-Portal-Dienstprogramme zugreifen können, aber könnte ich falsch liegen. Jede Hilfe oder Beratung wird geschätzt.

Dies ist das 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(); 
     } 
    } 
... 

und diese ihrer Definition bei 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> 
+0

, welche Version von Liferay sind Sie haben zu müssen? –

+0

Liferay Community Edition Portal 7.0.3 GA4 – losalo

Antwort

1

einen Blick auf dieses Beispiel-Servlet haben. https://github.com/liferay/liferay-blade-samples/tree/master/gradle/extensions/servlet. Der Ansatz, den Sie erwähnt haben, ist mehr für die Version 6.2.

Dann, wenn Sie die OSGi-Komponente haben, können Sie leicht Dienste injizieren.

@Reference 
private UserLocalService servcie; 

Sie müssen die Abhängigkeit org.osgi:org.osgi.service.component.annotations:1.3.0

Alternativ einen Blick auf die JAX-RS-Schnittstelle

+1

Auch ich habe die OSGi-Lösung noch nicht ausprobiert, Sie haben mir sehr geholfen, auf Liferay-Version zu zeigen. Die Importe, die ich hatte, entsprechen Version 6.x. In Version 7 sind sie ein bisschen anders. Intead von "com.liferay.portal.service.UserLocalServiceUtil" der korrekte Import ist "com.liferay.portal.kernel.service.UserLocalServiceUtil" und so weiter. Jetzt funktioniert es. Ich probiere den OSGi-Weg wie du vorgeschlagen hast, da es ziemlich interessant ist. Danke vielmals. – losalo