所以我在弄清楚如何处理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的新手,而不是因为我应该做很多这些事情。
答案 0 :(得分:1)
因为你需要使用
<portlet:actionURL>
处理表格提交行动.....
答案 1 :(得分:1)
您首先必须了解的(并且花费了我很多时间)是portlet工作流程。
一个portlet要么自己处理她的行动。
当调用portlet的操作时,也会自动请求它执行其render方法(在其操作之后)。
事实
这纯粹是理论上的,因为你可以搞砸所有这些工作流程。我仍然不建议你这样做有多种原因,如:
现在,如果您想在流程操作中获取表单的字段值,它们将作为请求参数提供。
如果想要获取portlet首选项,我建议您阅读一些有关portlet配置on the liferay wiki的内容。
您似乎也希望能够将操作请求或请求从portlet发送到另一个 请记住,liferay-portlet:actionURL标记和liferay-portlet:renderURL标记都有一个属性portletName,允许您指定当前的portlet。
希望这会有所帮助。 不要犹豫,问我是否不够清楚或是否提出其他问题。