我想在portlet中创建一个链接,以便我可以导航到liferay门户中的另一个页面.我命令这样做我正在寻找一个给定页面名称的API(可以是liferay特定的),它将返回它的url(它也可以是friendlyURL).
我是liferay门户网站的新手.我在liferay中开发了一个用于演示的portlet.我在这个例子中使用了port portlet通信.我正在做的是: - 我有一个搜索portlet,其中我有一个文本字段用于搜索.当我点击搜索按钮时,它从数据库中获取数据并使用另一个portlet中包含的搜索显示该数据.我为这个项目使用了ProcessEvent和ActionEvent批注.
现在我想要的是当我点击搜索按钮然后页面不应该刷新(即我希望使用AJAX的概念)并且数据应该显示在另一个portlet上.
代码片段
Portlet A - view.jsp
<%@include file="/html/init.jsp"%>
<portlet:defineObjects />
<!--
<portlet:actionURL var="actionURL" name="pitchBall"></portlet:actionURL>
//-->
**Change to Resource URL**
<portlet:resourceURL var="resourceURL">
</portlet:resourceURL>
<aui:form method="POST" action="<%= resourceURL%>" name=" <portlet:namespace>fm1</portlet:namespace>">
<aui:input name="search" id="search" />
<aui:button type="submit" name="Search" value="Search" />
</aui:form>
Run Code Online (Sandbox Code Playgroud)
Portlet A - SearchPortlet类
package com.test;
/**
* Portlet implementation class SearchPortlet
*/
public class SearchPortlet extends GenericPortlet {
@Override
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
// TODO Auto-generated method stub
super.render(request, response);
} …
Run Code Online (Sandbox Code Playgroud) 如何在特定的Liferay页面上找到添加的portlet?
例如:
我有三个页面:欢迎,维基和搜索.
现在所有这些页面都添加了portlet,其中一些是可实例化的portlet(如web-content display和iframe portlets).
现在我想在请求参数等形式的信息传递给iframe-portlet
上Search page
从Welcome page
.
如何使用简单的Java代码将当前用户连接到Liferay门户?
我正在使用Liferay 6.0.6
我已经尝试过liferay-ui:search-container
以表格/网格格式在UI上获取和显示数据库表记录.通过使用liferay-ui:search-container
我得到如下所示的输出,
我在上面的屏幕截图中获取USER_表记录.
问题:
我想让网格列动态化,我希望为最终用户启用一个选项,以删除不需要的列并在相应的网格/表中添加所需的列.
EX:
在上面的屏幕截图中,以下列显示在网格中.
First Name, Last Name, Screen Name, Job Title, Organization, User Groups
Run Code Online (Sandbox Code Playgroud)
现在,如果用户想删除Job Title
并希望Greetings and Mail Address
在UI上添加列,而不需要触摸/修改代码.
我该如何实现此功能?
注意:
我需要为自定义模型实现此功能.
查询:
1)是否有任何API /方法来实现/启用此功能?
2)如果不能,我该如何实施这些步骤?有任何建议或步骤来完成这项任务吗?
我正在使用Retrofit 2制作一个Android应用程序.我的REST Api都是用Liferay编写的.现在在Liferay中,我所看到的是,访问我们需要首先进行身份验证的Web服务.所以我已经这样认证了
http://test:q1w2e3r4@192.168.0.110:8080/liferay-portlet/api/secure/jsonws/
Run Code Online (Sandbox Code Playgroud)
Liferay有自己的用户身份验证方法,我们已经覆盖了.我检查了Postman的Web服务调用工作正常.
URL:http://test:q1w2e3r4@192.168.0.110:8080/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name
Run Code Online (Sandbox Code Playgroud)
形式编码的值
companyId:10154
screenName:xyz
password:xyz
active:true
Run Code Online (Sandbox Code Playgroud)
如果我把它放在邮递员中,它会正确地获取json响应.
现在,当我从我的Android代码中调用相同的内容时,我得到一个响应"未经授权".
我的改造服务
public interface LoginApi {
@FormUrlEncoded
@POST("/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name")
Call<User> login(@Field("companyId")long companyId,@Field("screenName")String screenName,@Field("password")String password,@Field("active")boolean active);
}
Run Code Online (Sandbox Code Playgroud)
我的RestApiManager类(此类用于调用服务接口并创建改造构建器)
public class RestApiManager {
private LoginApi loginApi;
public LoginApi login() {
if (loginApi==null) {
GsonBuilder gson=new GsonBuilder();
gson.registerTypeAdapter(String.class, new StringDeserializer());
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://test:q1w2e3r4@192.168.0.110:8080")
.addConverterFactory(GsonConverterFactory.create())
.build();
loginApi=retrofit.create(LoginApi.class);
}
return loginApi;
}
Run Code Online (Sandbox Code Playgroud)
调用RestApiManager
Call<User> callUser=restApiManager.login().login(loginData.getCompanyId(),loginData.getScreenName(),loginData.getPassword(),loginData.isActive());
callUser.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response, Retrofit retrofit) {
Log.d("Login","Login Response:"+response.body());
}
@Override
public …
Run Code Online (Sandbox Code Playgroud) 我们正在尝试将liferay服务构建器用作所有portlet的公共层.我们创建了一个单独的公共portlet项目,我们使用service.xml构建服务.这为我们生成了一个service.jar文件.我们正在将这个jar复制到所有portlet WEB-INF/lib目录.
当我们运行portlet时,它会在日志上抛出以下错误,并且Portlet暂时不可用消息显示在portlet上.
14:43:17,447 ERROR [jsp:154] com.liferay.portal.kernel.bean.BeanLocatorException: BeanLocator has not been set
at com.liferay.portal.kernel.bean.PortletBeanLocatorUtil.locate(PortletBeanLocatorUtil.java:40)
at com.cogs.common.service.CourseLocalServiceUtil.getService(CourseLocalServiceUtil.java:223)
at com.cogs.common.service.CourseLocalServiceUtil.getCoursesCount(CourseLocalServiceUtil.java:187)
at org.apache.jsp.jsps.course.course_005fview_jsp._jspService(course_005fview_jsp.java:542)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
Run Code Online (Sandbox Code Playgroud)
我确信这种方法应该无缝地工作.但发现有几个人在liferay论坛上抱怨它,但还没有找到任何解决方案.如果您找到一种方法将服务构建器用作公共层并且它对您有用,请告诉我们.
我们正在使用maven来构建所有portlet项目.
Liferay版本是6.0.5我们正在使用Spring Portlet MVC进行portlet开发.
我的问题:
我成功获取了我的实体的单个记录,但是当我触发搜索查询或尝试获取多个实体时,我得到:
com.liferay.portal.kernel.bean.BeanLocatorException:尚未为servlet上下文设置BeanLocator MyCustom-portlet
我已经按照以下一些链接来设置Junit与Liferay:
我的环境
Liferay 6.0.5 EE与Tomcat捆绑在一起
带有Liferay IDE 1.4的Eclipse Helios使用Junit4
我在eclipse中使用"ant"命令运行我的测试,但不是通过输入Alt+ Shift+ X, T.
这将是非常有益的,如果我能得到一些想法,如何去使用的交易使用JUnit(或至少一些想法,它是如何工作的Liferay),以及如何解决BeanLocatorException
(或者至少是为什么会被抛出)
任何帮助将不胜感激.
我正在尝试扩展现有Liferay portlet的一些功能.作为其中的一部分,我想使用Alloy UI来修改portlet中字段的值.有一个预先存在的<aui:script>
块我想定义我的自定义函数.我继续尝试使用A.one('element')
,但我收到错误"A未定义". A.one()
在同一个.jsp文件中的其他位置使用,但不在<aui:script>
块中,并且它按预期运行.
我试过谷歌搜索这个问题无济于事.我尝试过的一个解决方案是在元素块中包含"use"语句,但是当从jsp调用时,这使得该块中的所有函数都未定义.
我所说的"使用"声明是这样的:
<aui:script use="aui-node,aui-base">
// ... script
</aui:script>
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试做的大致概述:
<aui:script>
function save(){
// This is where I'm getting the 'A is not defined' error.
var titleNode = A.one('input[name=title]');
if (titleNode) {
// do stuff with titleNode
var titleVal = titleNode.val();
var titleSubstr = titleVal.substring(0, titleSubstr.lastIndexOf('/'));
titleNode.val(titleSubstr);
}
// other save-related code here
}
function otherFunction() {
// some other functionality
}
</aui:script>
Run Code Online (Sandbox Code Playgroud) 我正在使用Liferay 6进行门户开发.在Liferay下创建用户期间,我还需要添加一些额外的字段吗?如果这是可能的,请告诉我?
请看这里附的屏幕截图,也请告诉我哪个表格会存放在数据库中?