2011-12-22 99 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。

希望這會有所幫助。 不要猶豫,問我是否不夠清楚,或者這是否會引發其他問題。