标签: liferay-6

以编程方式获取liferay中页面的URL

我想在portlet中创建一个链接,以便我可以导航到liferay门户中的另一个页面.我命令这样做我正在寻找一个给定页面名称的API(可以是liferay特定的),它将返回它的url(它也可以是friendlyURL).

liferay liferay-6

18
推荐指数
2
解决办法
3万
查看次数

如何在Liferay中使用Ajax请求提交表单?

我是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)

ajax liferay liferay-6

16
推荐指数
1
解决办法
3万
查看次数

如何在Liferay中的特定页面上添加portlet?

如何在特定的Liferay页面上找到添加的portlet?

例如:
我有三个页面:欢迎,维基搜索.

现在所有这些页面都添加了portlet,其中一些是可实例化的portlet(如web-content display和iframe portlets).

现在我想在请求参数等形式的信息传递给iframe-portletSearch pageWelcome page.

portlet liferay liferay-6

15
推荐指数
1
解决办法
8738
查看次数

如何在Liferay中获取当前用户?

如何使用简单的Java代码将当前用户连接到Liferay门户?

我正在使用Liferay 6.0.6

java liferay-6

14
推荐指数
3
解决办法
3万
查看次数

liferay-ui中的动态列:搜索容器?

我已经尝试过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)如果不能,我该如何实施这些步骤?有任何建议或步骤来完成这项任务吗?

hook liferay liferay-6 liferay-theme liferay-aui

14
推荐指数
1
解决办法
662
查看次数

使用改进无法正常工作从Android通过Rest Web服务登录

我正在使用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)

rest android liferay-6 retrofit

14
推荐指数
2
解决办法
2183
查看次数

Liferay 6使用Common Service Builder层错误 - BeanLocatorException - 尚未设置BeanLocator

我们正在尝试将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开发.

exception spring-mvc liferay maven-3 liferay-6

10
推荐指数
1
解决办法
2万
查看次数

测试自定义插件portlet:BeanLocatorException和Transaction roll-back用于服务测试

我的问题:

  1. 我可以成功测试CRUD服务操作.我是做对@Before [设置()]插入和@After同一数据的删除[拆解()],但展望未来,我需要支持的交易,而不是插入和删除编写代码.
  2. 我成功获取了我的实体的单个记录,但是当我触发搜索查询或尝试获取多个实体时,我得到:

    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(或者至少是为什么会被抛出)

任何帮助将不胜感激.

java junit liferay junit4 liferay-6

10
推荐指数
1
解决办法
4637
查看次数

<aui:script>块内的"A未定义"

我正在尝试扩展现有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 liferay-6 alloy-ui

10
推荐指数
1
解决办法
7103
查看次数

是否可以在Liferay中的"创建用户"下添加"额外字段"

我正在使用Liferay 6进行门户开发.在Liferay下创建用户期间,我还需要添加一些额外的字段吗?如果这是可能的,请告诉我?

请看这里附的屏幕截图,也请告诉我哪个表格会存放在数据库中?

在此输入图像描述

liferay liferay-6

9
推荐指数
2
解决办法
9933
查看次数