2011-12-22 38 views
4

因此,我在处理liferay中的导航时遇到了一些问题。我是jsp,portlets和liferay的新手,但我想我已经用尽了所有需要回答的文档。Liferay中的Portlet导航

我正在寻找一种方法来提交一个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> 

使用后已经尝试了一些方法..,我会得到结果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 

如果我改变的形式获得,然后我得到这个网址:

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

但使用与参数集的renderURL,我会得到这个,这是一个什么样的组合后两者并获得将返回:

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 

就目前而言,我既可以使用与后一种形式,并ParamUtil.getString将识别数据,但链接不会是可收藏,或者我可以用一个形式GET ,在url中留下信息,但我无法让ParamUtil识别数据。即使我可以使用get表单来获取数据,但我真的不想使用它,因为如果我正在通过其他portlet中的表单进行任何提交,参数将不会被保留。据我所知,RenderURLs保留这些东西。

请原谅我,如果我完全关闭这些东西,请。我对jsp,portlets和liferay很陌生,而对于我应该怎么做很多这些东西感到遗憾。

+0

看来你的问题对于你想达到什么目标缺乏清晰度。 我们以某种方式得到了问题所在,但我不确定我是否可以将你放回到你想要的轨道上。 – Ar3s

回答

1

为u需要使用

<portlet:actionURL> 

处理表单提交的行动.....

1

你首先必须了解(和我花了很多时间)是portlet的工作流程。

portlet呈现自己的进程她的行动。

当一个portlet的动作被调用时,它会自动被要求执行它的render方法(在它的动作之后)。

由于事实

  • 如果你想只显示一个Portlet的问题
    • 的renderURL
  • 如果您想发送信息到您的portlet
    • actionUrl
  • ,如果您修改portlet配置/喜好
    • configurationUrl

这是因为你可以搞这所有的工作流了纯理论。不过我不建议你有多个原因喜欢这样做:

  • 它打破可维护性
  • 您将无法使用一些内置的逻辑,并且是真正强大的
  • 你给本机的工作流程你自己承担更多的责任,当它会崩溃。

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

如果tou想要获得portlet首选项,我建议你阅读一些关于portlet配置on the liferay wiki

您似乎也希望能够发送操作请求或从portlet向另一个portlet发送请求。
请始终记住liferay-portlet:actionURL标记和liferay-portlet:renderURL标记都有一个属性portletName,它允许您指定除当前portlet之外的其他portlet。

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