0

私はliferayが初めてです。データベースの 2 つの異なるテーブルからデータをフェッチする 2 つのポートレットが必要です。ページを更新せずに(ajaxを使用して)データを自動的に取得する必要があります。問題は、作成したポートレットの 1 つがページにデプロイされている場合、データを取得して適切に表示していることです。両方がデプロイされている場合、それらは 2 番目のポートレット テーブルのデータを表示しています。つまり、ポータルに 1 つのポートレットしかない場合、正しいデータ (特定のポートレットのテーブル) が表示され、自動的にフェッチされます。両方がポータルにある場合は、2 番目にデプロイされたものをフェッチしています。ポートレットのデータ (両方のポートレットで同じデータを表示)。

これが両方のポートレットの jsp コードです。データのフェッチにサービス ビルダーを使用しています。

ポートレット A

view.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<%@ page import="javax.portlet.PortletContext"%>
<%@ page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@ page import="javax.portlet.RenderRequest"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.portlet.*"%>

<portlet:defineObjects />

<portlet:actionURL
    windowState="<%=LiferayWindowState.EXCLUSIVE.toString()%>"
    var="fetchDatabase">
    <portlet:param name="databaseFetch" value="fetchWorkData"></portlet:param>
</portlet:actionURL>

<%
    PortletPreferences prefs = renderRequest.getPreferences();
%>

<script type="text/javascript">
var url = '<%=fetchDatabase.toString()%>';

    $(document).ready(function() {      
        $("#fetchLink").click(function() {
            $.post(url).done(function(data) {
                $("#fetchData").html(data);
            }); 
        });
    });

    $(document).ready(function() {
        //For Initial loading of database
         $('#fetchData').load(url);     
        function timeRefresh() {
            // setTimeout("location.reload(true);",timeoutPeriod);
            // make a ajax call here.
            $.post(url).done(function(data) {
                $("#fetchData").html(data);
            });
        }
        //Recalling the function repeatedly in given interval
        setInterval(function() {
            timeRefresh();
        }, 6000);
    });
</script>

<aui:layout id="fetchedData">
    <aui:button value="Refresh" id="fetchLink"></aui:button>
    <hr />
    <aui:layout id="fetchData"></aui:layout>
</aui:layout>

FetchData.java

package com.cherry.ajax.database;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import com.cherry.ajax.database.service.TestLocalServiceUtil;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.util.bridges.mvc.MVCPortlet;

/**
 * Portlet implementation class FetchData
 */
public class FetchData extends MVCPortlet {

    String action = "";

    @Override
    public void processAction(ActionRequest request, ActionResponse response)
            throws IOException, PortletException {
        action = request.getParameter("databaseFetch");
        try {

                TestLocalServiceUtil.add();

        } catch (SystemException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void doView(RenderRequest request, RenderResponse response)
            throws IOException, PortletException {
        response.setContentType("text/html");
        PortletRequestDispatcher dispatcher = null;
        if (action.equals("fetchWorkData")) {
            dispatcher = getPortletContext().getRequestDispatcher(
                    "/html/jsp/showData.jsp");
        } else {
            dispatcher = getPortletContext().getRequestDispatcher(
                    "/html/jsp/view.jsp");
        }
        action = "";
        dispatcher.include(request, response);
    }



}

ポートレット B

view.jsp

 <%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<%@ page import="javax.portlet.PortletContext"%>
<%@ page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@ page import="javax.portlet.RenderRequest"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.portlet.*"%>

<portlet:defineObjects />

<portlet:actionURL
    windowState="<%=LiferayWindowState.EXCLUSIVE.toString()%>"
    var="workloadUrl">
    <portlet:param name="drAction" value="getWorkData"></portlet:param>
</portlet:actionURL>

<%
    PortletPreferences prefs = renderRequest.getPreferences();
%>

<script type="text/javascript">
var url = '<%=workloadUrl.toString()%>';

    $(document).ready(function() {      
        $("#workloadLink").click(function() {
            $.post(url).done(function(data) {
                $("#drData").html(data);
            }); 
        });
    });

    $(document).ready(function() {
        //For Initial loading of database
         $('#drData').load(url);    
        function refresh() {
            // setTimeout("location.reload(true);",timeoutPeriod);
            // make a ajax call here.
            $.post(url).done(function(data) {
                $("#drData").html(data);
            });
        }
        //Recalling the function repeatedly in given interval
        setInterval(function() {
            refresh();
        }, 6000);
    });
</script>

<aui:layout id="DrWorkload">
    <aui:button value="Refresh" id="workloadLink"></aui:button>
    <hr />
    <aui:layout id="drData"></aui:layout>
</aui:layout>

DrStatus.java

package com.cherry.ajax.database;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import com.cherry.ajax.database.service.WorkloadLocalServiceUtil;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.util.bridges.mvc.MVCPortlet;

/**
 * Portlet implementation class DrStatus
 */
public class DrStatus extends MVCPortlet {

    String action = "";

    @Override
    public void processAction(ActionRequest request, ActionResponse response)
            throws IOException, PortletException {
        action = request.getParameter("drAction");
        try {

                WorkloadLocalServiceUtil.check();

        } catch (SystemException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void doView(RenderRequest request, RenderResponse response)
            throws IOException, PortletException {
        response.setContentType("text/html");
        PortletRequestDispatcher dispatcher = null;
        if (action.equals("getWorkData")) {
            dispatcher = getPortletContext().getRequestDispatcher(
                    "/html/drstatus/workloadData.jsp");
        } else {
            dispatcher = getPortletContext().getRequestDispatcher(
                    "/html/drstatus/view.jsp");
        }
        action = "";
        dispatcher.include(request, response);
    }

}

何か間違ったことをしている場合は、私に提案してください...

前もって感謝します

サミス KS

4

3 に答える 3