如何将值从 ajax 传递到 portlet 页面

Posted

技术标签:

【中文标题】如何将值从 ajax 传递到 portlet 页面【英文标题】:How to pass values from ajax to portlet page 【发布时间】:2020-12-29 05:33:41 【问题描述】:

我已经创建了 liferay portlet,我只是从 Api 获取天气数据并通过 ajax 获取数据,如下所示,现在我想将这些 json 数据从 ajax 传递到 portlet 页面并将其保存在 portlet 文件中的一些变量.我是liferay的新手,请任何人指导如何做到这一点。

init.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %><%@
taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@
taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@
taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<liferay-theme:defineObjects />
<portlet:defineObjects />
<select id="list" >
<option>Pakistan</option>
<option>India</option>
<option>America</option>
<option>China</option>
<option>Canda</option>
</select >
<br><br>
<button onClick="setup()" id="btnSubmit">Submit</button>
<div id='demo'></div>
  
<script>
var country
function setup()
   
    selectElement=document.querySelector('#list');
    var country=selectElement.value;    
    $.ajax(
        dataType: 'json',
        success: function(data) 
        
            document.getElementById("demo").innerhtml = 
                '<br>country : '+data.name+ 
                '<br>temprature : '+data.main.temp +
                ' °F<br>Percipitation : '+data.clouds.all +
                ' %<br>wind speed : '+data.wind.speed +
            '<br>humidity : '+data.main.humidity 
            
        ,
        url: 'http://api.openweathermap.org/data/2.5/weather?q='+country+'&appid=e53a861b8514a25b48d943fec2b4fcd7&units=imperial'
    );

</script>

这里是portlet文件

package assignment1.portlet;
import assignment1.constants.Assignment1PortletKeys;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import java.io.IOException;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.osgi.service.component.annotations.Component;
@Component(
    immediate = true,
    property = 
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.header-portlet-css=/css/main.css",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=Assignment1",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.name=" + Assignment1PortletKeys.ASSIGNMENT1,
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user",
        "com.liferay.portlet.private-session-attributes=false"
    ,
    service = Portlet.class
)
public class Assignment1Portlet extends MVCPortlet


    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException 
        // TODO Auto-generated method stub
        PortletSession session=renderRequest.getPortletSession();
        session.setAttribute("LIFERAY_SHARED_sessionMessage", "Sent Data From First Portlet",PortletSession.APPLICATION_SCOPE);
        super.doView(renderRequest, renderResponse);
    
    

【问题讨论】:

【参考方案1】:

当您使用 JSP 构建 HTML 输出时: 要与 portlet 通信,您将使用带有各种属性的 &lt;portlet:actionURL/&gt; 标记并向生成的 URL 发出 POST 或 GET 请求。您也可以添加参数(当然),它们通常由&lt;portlet:namespace/&gt; 修饰。在 portlet 端,您实现了一个动作处理程序(例如,一个名为 processAction 的方法,但 MVCPortlet(您用作超类)提供了更好的方法 - 我建议您阅读 Liferay 教程,作为完整描述因为这些选项超出了这里单一答案的范围。

另一种选择是仅使用独立于 portlet 的 REST 服务。

还有一条评论:您不应该将数据存储在会话中,将其存储为请求/响应属性就足够了,以便在渲染期间在 JSP 中可用。以后不用了。

【讨论】:

以上是关于如何将值从 ajax 传递到 portlet 页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用会话将值从一个php页面传递到另一个页面

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

如何将值从页面传递到 Blazor 中的布局?

Java ajax 将值从 jsp 传递到 servlet

通过使用 java 脚本,我如何将值从一个 html 页面传递到另一个 html 页面? [复制]

如何使用 JavaScript 将值从一个 HTML 页面传递到另一个页面?