我在 Liferay 6.1 中创建注册 portlet 并将用户帐户存储在数据库的默认 User_
表中时遇到问题。
我正在使用默认的Liferay类UserLocalServiceUtil
及其方法UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword,password1,password2,autoScreenName,screenName,emailAddress,facebookId,openId,locale,firstName 、middleName、lastName、prefixId、suffixId、male、birthdayMonth、birthdayDay、birthdayYear、jobTitle、groupIds、organizationIds、roleIds、userGroupIds、sendEmail、serviceContext);
我遇到这个错误:
java.lang.NullPointerException
at com.liferay.portal.security.pwd.PwdToolkitUtil.validate(PwdToolkitUtil.java:40)
at com.liferay.portal.service.impl.UserLocalServiceImpl.validate(UserLocalServiceImpl.java:5405)
at com.liferay.portal.service.impl.UserLocalServiceImpl.addUserWithWorkflow(UserLocalServiceImpl.java:592)
at com.liferay.portal.service.impl.UserLocalServiceImpl.addUser(UserLocalServiceImpl.java:463)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:112)
at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:71)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:108)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:59)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:108)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:59)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:108)
at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:211)
at $Proxy96.addUser(Unknown Source)
at com.liferay.portal.service.UserLocalServiceUtil.addUser(UserLocalServiceUtil.java:445)
at org.apache.jsp.register_jsp._jspService(register_jsp.java:123)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:113)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:316)
at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:105)
at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:366)
at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:382)
at com.liferay.util.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:315)
at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
...
最佳答案
看起来您正在尝试直接从 jsp 从 portlet 的呈现状态调用此方法 - 您应该在呈现之前从操作状态执行此操作。在渲染期间,您不应该更改任何状态。
阅读有关 portlet 生命周期的信息,其中对此进行了更详细的解释。简而言之:如果您习惯于在 servlet 中使用 jsps 执行所有操作,则必须重新学习 portlet:操作和渲染是完全分开的状态。通常,Portlet 呈现的频率比实际处理操作的频率要高得多(因为一页上可以有许多不同的 Portlet,因此只有一个 Portlet 可以处理某个操作,而所有 Portlet 都可以显示/呈现。
关于java - 在 Liferay 6.1 的 User_ 表中创建注册页面以创建用户帐户时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249198/