我们正在讨论从liferay安装上的普通portlet开发切换到基于webmvc portlet的开发是否是一个好主意.
我们很快就会开始开发一些portlet,所以现在是时候了.但我看到的问题是我们想要使用一些portlet 2.0功能,这些功能不适用于早于spring 3.0的版本.(对?)
有没有人见过,如果值得等待?(什么时候预定3.0?)目前的里程碑是否足够稳定?
我们的第一个真正的发布将在今年的最后一个季度,所以springource的家伙还有一些时间来获得最后的决定...... ;-)
有任何想法吗?
UPDATE
因此,Spring 3已经发布,它支持我们需要的所有JSR286功能.(我认为这是对JSR286功能的完全支持)
我看到的唯一缺点是文档在注释方面没有达到速度.
我需要获取网站的统计信息并生成报告.我正在使用Liferay门户网站.Liferay中是否有内置的网页分析功能?如果是,请帮助如何配置它?
谢谢,Dhananjay
我花了最近六个小时来搜索谷歌和stackoverflow来回答这个问题.我原来是一名PHP开发人员,所以请耐心等待 - 从PHP控制器返回一个JSON数组是微不足道的.
我正在使用Spring MVC 3.0,我只想将JSON对象从我的Spring MVC Controller返回给一些Javascript.目前似乎没有简单的方法来使用portlet(https://jira.springsource.org/browse/SPR-7344)进行此操作.我见过的解决方案建议创建另一个提供JSON响应的DispatcherServlet,但我还没有找到一个记录良好的例子.如果有人知道一个很好的方法来完成这个(最好带注释),请告诉我!
我正在尝试修复为自定义portlet管理器分配的日历portlet的月份导航.从特定的浏览器页面模板调用此管理器:
<div id="calendar"
tal:content="structure provider:my.custom.portletmanager" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,管理器没有为我呈现带有哈希的包装器,所以我试图手动将kssattr-portlethash css类附加到上面的<div>标签,以使月导航工作(refreshPortlet()需要它).我试过这个:
from plone.portlets.utils import hashPortletInfo
class SectionHomeView(BrowserView):
"""SectionHome browser view
"""
implements(ISectionHomeView)
def __init__(self, context, request):
self.context = context
self.request = request
@property
def getHash(self):
info = dict(manager = 'my.custom.portletmanager',
category = 'context',
key = '/my-section',
name = 'mycalendar',
)
return hashPortletInfo(info)
Run Code Online (Sandbox Code Playgroud)
使用此代码我得到一个哈希,但日历导航仍然无法正常工作.如何才能访问portlet信息,例如经理,类别,密钥和名称,以便正确计算?
我希望我有来自plone.app.portlets.browser.templates的column.pt及其类ColumnPortletManagerRenderer(portlets/manager.py)所描述的行为,但我不知道如何让我的自定义管理器提供那些(即:like默认经理做).
我有一个问题是实现一个简单的HTTP重定向.
我使用Liferay 6.0.6,我们的portlet是用JSF2.0/PortletFaces构建的.
我想在加载视图时调用重定向(而不是在触发操作时).目前,我的函数由PreRenderView监听器调用.
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
在这个函数中,我可以检查权限,做其他的事情,在某些情况下,我想将用户重定向到一个新的页面(而不是另一个视图).
我尝试了几种方法,但没有成功.具体来说,我认为这种方法可行:
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
Run Code Online (Sandbox Code Playgroud)
这个错误是合乎逻辑的,但是有一个强制重定向的解决方案.
它可以在另一个函数中实现,否则,我只需要Hibernate Session(在渲染阶段的开头设置)
你有想法解决这个问题吗?
谢谢!
ps:<redirect />或者?faces-redirect不使用portlet.
在任何portlet应用程序中,如果在两个浏览器选项卡中打开包含portlet的同一页面,那么第一页中的事件与第二页的区别如何?
我想为每个事件分配一个唯一的Id,存储它并将其附加到URL,以便可以共享该链接.
有人能提出他们的想法吗?
此外,如果在其他计算机上打开页面URL,则页面上显示的数据与第一台计算机上显示的数据相同.这是全球设定的.
我怎么能消除这个?
所以我在弄清楚如何在liferay中处理导航时遇到了一些麻烦。我是jsp,portlet和liferay的新手,但我认为我已经用尽所有文档来寻找答案。
我正在寻找一种提交html表单并使用字段设置渲染参数的方法。我想拥有可与常规浏览器导航一起使用的URL,以及可添加书签的URL。我想出了一种方法,可以使用javascript用表单中的新值更新已声明的renderurl,但我正在尝试找出一种更干净的方法。
现在我已经尝试了几种方法..使用此页面
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portal.kernel.util.Validator" %>
<%@ page import="javax.portlet.PortletPreferences" %>
<portlet:defineObjects />
<%
PortletPreferences prefs = renderRequest.getPreferences();
String search = ParamUtil.getString(renderRequest, "search");
%>
<portlet:renderURL var="viewURL">
<portlet:param name="jspPage" value="/view.jsp" />
</portlet:renderURL>
<aui:form action="<%= viewURL %>" method="post">
<aui:input label="search" name="search" type="text" value="<%=search %>" />
<aui:button type="submit" />
</aui:form>
Run Code Online (Sandbox Code Playgroud)
使用post,我将得到结果URL:
http://localhost:8080/web/10157/home?p_p_id=search_WAR_searchportlet_INSTANCE_Kt9C&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_search_WAR_searchportlet_INSTANCE_Kt9C_jspPage=%2Fview.jsp
Run Code Online (Sandbox Code Playgroud)
如果我将表单更改为get,那么我将获得以下网址:
http://localhost:8080/web/10157/home?_search_WAR_searchportlet_INSTANCE_Kt9C_search=123
Run Code Online (Sandbox Code Playgroud)
但是使用带有参数集的renderURL,我会得到的,这是post和get都会返回的组合:
http://localhost:8080/web/10157/home?p_p_id=search_WAR_searchportlet_INSTANCE_Kt9C&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_search_WAR_searchportlet_INSTANCE_Kt9C_jspPage=%2Fview.jsp&_search_WAR_searchportlet_INSTANCE_Kt9C_search=123
Run Code Online (Sandbox Code Playgroud)
因此,就目前而言,我可以使用带有post的表单,并且ParamUtil.getString将识别数据,但是该链接不可收藏,或者可以使用带有get的表单,将信息保留在url中,但是我无法获取ParamUtil识别数据。即使我可以使用get表单来识别数据,但我真的不想使用它,因为如果我要从其他portlet的表单进行提交,则不会保留该参数。据我了解,RenderURLs保留了这些内容。
请原谅我,如果我对这些事情完全不满意。我是jsp,portlet和liferay的新手,但是我对应该如何做很多这些事情很迷茫。
当我的portlet实例将从页面中删除时,我想捕获该事件以从该portlet获取一些首选项值,并执行某些操作.
在Liferay中有没有类似接口或钩子的东西?
我正在尝试为Liferay portlet创建配置页面,因此我可以为它设置一些参数.例如,我想选择控制器在查看时应显示的页面.配置应位于此处:

所以我为配置创建了一个控制器,如下所示:
import com.liferay.portal.kernel.portlet.ConfigurationAction;
import javax.portlet.*;
public class SandboxPortletConfig implements ConfigurationAction {
@Override
public void processAction(PortletConfig portletConfig,
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {
}
@Override
public String render(PortletConfig portletConfig, RenderRequest renderRequest,
RenderResponse renderResponse) throws Exception {
return "/sandboxPortlet/config";
}
}
Run Code Online (Sandbox Code Playgroud)
视图部分的JSP页面:
<%@ page pageEncoding="UTF-8"%>
<%@ include file="../init.jsp"%>
<form>
Select:
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
我已经设置了我的portlet.xml来包含:
<portlet>
<portlet-name>sandboxPortlet</portlet-name>
<display-name>Sandbox Portlet</display-name>
<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
<init-param>
<name>contextConfigLocation</name>
<value>/WEB-INF/spring/sandbox-portlet-context.xml</value>
</init-param>
<init-param>
<name>config-jsp</name>
<value>/WEB-INF/html/sandboxPortlet/config.jsp</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
</supports>
<portlet-info>
<title>Sandbox Portlet</title>
<short-title>Sandbox</short-title> …Run Code Online (Sandbox Code Playgroud) 我使用Grails 2.0.4,Portlets Plugin 0.9.2和Liferay Portlets Plugin 0.4创建了一个自定义的Liferay 6.2 portlet .
部署portlet后,我收到一个奇怪的错误.这是发生的事情:
日志表明以下错误:
com.liferay.portal.NoSuchResourceActionException: <Portlet>_WAR_<PortletApp>#VIEW
Run Code Online (Sandbox Code Playgroud)
我见过其他情况,其中"#VIEW"表示"#ADD_TO_PAGE".请注意,portlet正在部署并在我用于开发的Liferay 6.2的香草版本上正常工作.
有谁知道这个问题可能是什么?谢谢.
堆栈跟踪:
Jan 16, 2014 10:42:40 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
com.liferay.portal.NoSuchResourceActionException: <Portlet>_WAR_<PortletApp>#VIEW
at com.liferay.portal.service.impl.ResourceActionLocalServiceImpl.getResourceAction(ResourceActionLocalServiceImpl.java:196)
at sun.reflect.GeneratedMethodAccessor308.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175)
at com.sun.proxy.$Proxy85.getResourceAction(Unknown Source)
at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.doUpdateResourcePermission(ResourcePermissionLocalServiceImpl.java:1190)
at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.updateResourcePermission(ResourcePermissionLocalServiceImpl.java:1312)
at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.setOwnerResourcePermissions(ResourcePermissionLocalServiceImpl.java:1038)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62) …Run Code Online (Sandbox Code Playgroud)