当前位置: 首页 > 知识库问答 >
问题:

Liferay portlet在处理后重新发送init页面

狄承望
2023-03-14

我正在使用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);
    }
}
<%@ 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>
<%@ 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 %>">&larr; Back</a></p>

在edit.jsp的表单submit中,它应该重新呈现该页面。当我只是使用portlet:renderURL而不是portlet:actionUrl时,它可以正确地执行,但是actionUrl不会重新呈现。教程说它应该再次呈现edit.jsp,所以我不确定我遗漏了什么。注意:它正在正确保存我的所有参数。

共有1个答案

孙恩
2023-03-14

根据JSR 286(又名Portlet规范2.0),Plt.11.1.1.2:

portlet容器不能将操作或事件请求中接收的参数传播到portlet的后续呈现请求。

这是当用户单击浏览器页面上的Submit按钮时发生的情况:

    null
    null

对不起,关于这个主题有很多话要说,希望我写的能对你有用!

 类似资料:
  • 问题内容: 有没有一种方法可以避免在刷新php页面时重新处理表单?我想防止重新刷新表单中带有插入功能的php文件的链接。例如,我正在处理用户在每页顶部写的一系列便笺以获取新便笺。除了创建带有标头功能的独立php文件外,还有另一种方法吗? 问题答案: 使用Post-Redirect-Get模式。 接受发布请求 处理数据 发出重定向响应 接受获取请求 发出200回应 如果您需要显示提交的数据中的数据,

  • 更新:我发布了两个更简洁的代码片段,说明了混乱的根源: https://gist.github.com/mttkay/9fbb0ddf72f471465afc https://gist.github.com/mttkay/5dc9bde1006b70e1e8ba

  • 前言 在消息处理后,会有内存回收的过程this.accumulator.deallocate(batch); 调用deallocate()

  • 我正在使用react和Next.js进行API请求(从搜索栏),并在主页上显示电影列表,每个搜索结果都将带我到一个不同的页面,该页面将显示与该电影相关的数据。每次刷新details页面时,由于api请求错误导致查询结果丢失,使用Backwards/Forward按钮也会丢失搜索结果。 index.js details.js 此外,我还实现了一个Searchbar组件,在index.js中使用了它,

  • 为什么在刷新页面后重新提交 去http://qass.im/message-envelope/ 并上传任何文件,但仅限文本"gif","jpeg","jpg","png","zip","pdf","docx","rar","txt" 上传后点击F5按钮刷新页面 现在重新提交并重新上传文件! 为什么呢? 我想在上传文件后禁用重新提交而不使用jquery

  • 我的模型包含大量的代理。但是,我希望部分删除/删除一些在运行时完成工作的代理,以便释放计算内存、加快模型执行并避免OOM。 context.remove()是否真的永久消除/杀死代理(对象)?此操作后是否释放内存?如果不是,正确的过程是什么?