【发布时间】:2015-01-21 18:37:00
【问题描述】:
我正在使用 portlet,并且正在研究 liferay 的 wiki 上的示例:https://www.liferay.com/documentation/liferay-portal/6.1/development/-/ai/writing-the-my-greeting-portl-4
在处理表单后,我遇到了一些关于 portlet 重定向回 init jsp 的问题。我的 Java 类是:
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class Directory extends MVCPortlet {
@Override
public void processAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences();
String greeting = actionRequest.getParameter("greeting");
if (greeting != null) {
prefs.setValue("greeting", greeting);
prefs.store();
}
super.processAction(actionRequest, actionResponse);
}
}
我有两个 jsps。 view.jsp:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ page import="javax.portlet.PortletPreferences" %>
<portlet:defineObjects />
<%
PortletPreferences prefs = renderRequest.getPreferences();
String greeting = (String)prefs.getValue(
"greeting", "Hello! Welcome to our portal.");
%>
<p><%= greeting %></p>
<portlet:renderURL var="editGreetingURL">
<portlet:param name="mvcPath" value="/edit.jsp" />
</portlet:renderURL>
<p><a href="<%= editGreetingURL %>">Edit greeting</a></p>
还有edit.jsp:
<%@ 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 greeting = (String)prefs.getValue(
"greeting", "Hello! Welcome to our portal.");
%>
<portlet:actionURL var="editGreetingURL">
<portlet:param name="mvcPath" value="/edit.jsp" />
</portlet:actionURL>
<aui:form action="<%= editGreetingURL %>" method="post">
<aui:input label="greeting" name="greeting" type="text
value="<%=greeting%>
<aui:button type="submit" />
</aui:form>
<portlet:renderURL var="viewGreetingURL">
<portlet:param name="mvcPath" value="/view.jsp" />
</portlet:renderURL>
<p><a href="<%= viewGreetingURL %>">← Back</a></p>
在edit.jsp 的表单提交上,它应该重新呈现该页面。当我只使用 portlet:renderUrl 而不是 portlet:actionUrl 时,它会正确执行,但 actionUrl 不会重新呈现。该教程说它应该再次呈现edit.jsp,所以我不确定我错过了什么。注意:它正确保存了我的所有参数。
【问题讨论】:
-
您使用的是 Liferay 6.1 还是 Liferay 6.2?而不是渲染edit.jsp会发生什么?它返回到 view.jsp,对吧?
-
我们使用的是 Liferay 6.1.2。是的,它返回到 view.jsp。我将代码 actionResponse.setRenderParameter("mvcPath","/edit.jsp") 添加到我的 java 类中,它正确地引导了它,但这似乎仍然不是正确的方法。我在 portlet.xml 中的 init 参数是 view.jsp,所以它几乎就像是在重新初始化整个 portlet。