我们正在讨论从liferay安装上的普通portlet开发切换到基于webmvc portlet的开发是否是一个好主意.
我们很快就会开始开发一些portlet,所以现在是时候了.但我看到的问题是我们想要使用一些portlet 2.0功能,这些功能不适用于早于spring 3.0的版本.(对?)
有没有人见过,如果值得等待?(什么时候预定3.0?)目前的里程碑是否足够稳定?
我们的第一个真正的发布将在今年的最后一个季度,所以springource的家伙还有一些时间来获得最后的决定...... ;-)
有任何想法吗?
UPDATE
因此,Spring 3已经发布,它支持我们需要的所有JSR286功能.(我认为这是对JSR286功能的完全支持)
我看到的唯一缺点是文档在注释方面没有达到速度.
我需要获取网站的统计信息并生成报告.我正在使用Liferay门户网站.Liferay中是否有内置的网页分析功能?如果是,请帮助如何配置它?
谢谢,Dhananjay
我正在尝试使用jQuery/ajax调用portlet的serveResource()方法.我设法得到一个简单的JSR-286 portlet,它在Pluto 2.0中工作,能够从请求体读取JSON字符串,从JSON创建一个Java对象,并将该对象的toString()返回给我的调用JavaScript.但是,当我将相同的portlet部署到WebSphere Portal 6.1时,请求体在到达serveResource()时是空的.
我假设我遗漏了一些基本/基本的东西,所以任何建议都会受到赞赏.我认为如果我将JSON字符串推送到URL参数上,但我现在可以避免使用这种方法,我可以让我的示例工作,除非我给出了我当前方法"糟糕"的原因.
编辑:*更具体地说,我将相同的portlet部署到运行WSRP Producer的WAS7并通过WebSphere Portal 6.1使用portlet.
Javascript代码段:
function ajaxPost() {
var url = "<%= testServiceURL %>";
var current = $("input.current").val();
$.ajax(
{
url: url,
contentType: 'application/json; charset=utf-8',
dataType: 'html',
data: "{data: " + current + "}",
type: 'POST',
success: testSuccess,
error: testError
}
);
$("div.trace").append("ajax post fired<br />");
}
function testSuccess(data, textStatus, XMLHttpRequest)
{
$("div.trace").append("testSuccess(): " + data + "<br />");
}
Run Code Online (Sandbox Code Playgroud)
Portlet代码段:
public class TestPortlet extends GenericPortlet {
...
@Override
public void serveResource(ResourceRequest request, ResourceResponse …Run Code Online (Sandbox Code Playgroud) 我花了最近六个小时来搜索谷歌和stackoverflow来回答这个问题.我原来是一名PHP开发人员,所以请耐心等待 - 从PHP控制器返回一个JSON数组是微不足道的.
我正在使用Spring MVC 3.0,我只想将JSON对象从我的Spring MVC Controller返回给一些Javascript.目前似乎没有简单的方法来使用portlet(https://jira.springsource.org/browse/SPR-7344)进行此操作.我见过的解决方案建议创建另一个提供JSON响应的DispatcherServlet,但我还没有找到一个记录良好的例子.如果有人知道一个很好的方法来完成这个(最好带注释),请告诉我!
对于由 Liferay EE 6.0 SP1 提供支持的网站,在某些情况下,某些页面将需要“共享”某些 portlet 的相同实例,而其他页面将拥有自己的实例。
例如(人为设计的,但希望是说明性的),考虑一个具有更改 portlet 背景颜色的首选项的 portlet。
假设我们有以下页面(该页面上 portlet 的背景颜色遵循此列表中的页面名称):
家(绿色) ?? 关于(蓝色) ? ?? 联系人(蓝色) ?? 产品(橙色) ? ?? AXL-900(橙色) ? ?? VCC-218(橙色) ?? 支持(红色) ? ?? 贵宾(金) ?? 合法(绿色)
请注意,在多个页面上,portlet 具有相同的背景颜色首选项。到目前为止,这很容易;您只需向每个页面添加一个单独的 portlet 实例并适当地设置首选项。
然而,内容管理者不想在每页的基础上管理背景颜色;例如,他们希望将所有“关于”页面上的 portlet 的背景颜色同时更改为紫色(这是有道理的;它使原本需要手动操作的内容自动化[并且根据定义,容易出错] 过程)。
为此,例如,“关于”和“联系人”页面都必须使用相同的 portlet 实例……或者它们必须具有单独的实例,但两个实例将共享相同的首选项值。或者也许有不同的方法。
有没有办法使这项工作?
我有一个问题是实现一个简单的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的新手,但是我对应该如何做很多这些事情很迷茫。
我正在使用ubuntu 12.04,liferay版本6.0.1,在我的系统上打开jdk 6.我试图在java中获取远程ip和位置.为此我找到了Host Ip服务,通过它我可以使用apache http get方法获取位置.我已在本地系统上成功执行了此操作.但是在实际的服务器上,liferay portlet没有运行,并且很难找到错误,因为多个实例同时运行.服务器是基于Window的.我在MVC Portlet的doView()中使用此方法来获取ip
com.liferay.portal.util.PortalUtil.getHttpServletRequest(renderRequest).getRemoteAddr()
Run Code Online (Sandbox Code Playgroud) 我正在尝试为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)