Liferay中的Portlet导航

时间:2011-12-22 17:51:11

标签: liferay portlet

所以我在弄清楚如何处理liferay中的导航时遇到了一些麻烦。我是jsp,portlets和liferay的新手,但我想我已经用尽所有文档寻找答案了。

我正在寻找一种提交html表单并使用字段设置渲染参数的方法。我希望网址能够与普通的浏览器导航和可收藏的网址一起使用。我已经找到了一种方法,通过使用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>

使用帖子,我会得到生成的网址:

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

如果我将表单更改为get,那么我会收到此网址:

http://localhost:8080/web/10157/home?_search_WAR_searchportlet_INSTANCE_Kt9C_search=123

但是使用带参数集的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

所以现在,我可以使用带有post的表单,ParamUtil.getString将识别数据,但链接将不会被收藏,或者我可以使用带有get的表单,将信息保留在url中,但是我无法让ParamUtil识别数据。即使我可以使用get表单来识别数据,我真的不想使用它,因为如果我正在从其他portlet中的表单进行任何提交,则不会保留该参数。根据我的理解,RenderURL保留了这些东西。

请原谅我,如果我完全不喜欢这些东西,拜托。我是jsp,portlets和liferay的新手,而不是因为我应该做很多这些事情。

2 个答案:

答案 0 :(得分:1)

因为你需要使用

<portlet:actionURL>

处理表格提交行动.....

答案 1 :(得分:1)

您首先必须了解的(并且花费了我很多时间)是portlet工作流程。

一个portlet要么自己处理她的行动。

当调用portlet的操作时,也会自动请求它执行其render方法(在其操作之后)。

事实

  • 如果您只想显示一个portlet
    • 的renderURL
  • 如果要向portlet发送信息
    • actionUrl
  • 如果要修改portlet配置/首选项
    • configurationUrl

这纯粹是理论上的,因为你可以搞砸所有这些工作流程。我仍然不建议你这样做有多种原因,如:

  • 打破了可维护性
  • 您将无法使用一些非常强大的内置逻辑和原生工作流程
  • 你会对自己崩溃的时间给自己更多的责任。

现在,如果您想在流程操作中获取表单的字段值,它们将作为请求参数提供。

如果想要获取portlet首选项,我建议您阅读一些有关portlet配置on the liferay wiki的内容。

您似乎也希望能够将操作请求或请求从portlet发送到另一个 请记住,liferay-portlet:actionURL标记和liferay-portlet:renderURL标记都有一个属性portletName,允许您指定当前的portlet。

希望这会有所帮助。 不要犹豫,问我是否不够清楚或是否提出其他问题。