Liferay 委托 Servlet 无法访问 liferay 实用程序 bean
Liferay Delegate Servlet cannot access liferay utility beans
我正在尝试在 Liferay 中构建一个委托 servlet,它需要知道 Liferay 中已连接用户的列表(使用 com.liferay.portal.service.UserLocalServiceUtil)
在 Liferay 中部署一个简单的委托 servlet 并打个招呼时,我没有遇到任何问题,但是当我尝试使用 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>
看看这个示例 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 界面
我正在尝试在 Liferay 中构建一个委托 servlet,它需要知道 Liferay 中已连接用户的列表(使用 com.liferay.portal.service.UserLocalServiceUtil)
在 Liferay 中部署一个简单的委托 servlet 并打个招呼时,我没有遇到任何问题,但是当我尝试使用 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>
看看这个示例 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 界面