0

这是我的 view.jsp,它只是来自 Google 的示例。在继续之前,我只想让它显示:

<%@ include file="/init.jsp" %>

    <p>
        <b><liferay-ui:message key="mapsportlet_mapsPortletmvcportlet.caption"/></b>
    </p>

<DOCTYPE! html>
<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <style>
      html, body {
        height: 20%;
        margin: 0;
        padding: 0;
      }
      #map {
        height: 20%;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      var map;
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -34.397, lng: 150.644},
          zoom: 8
        });
      }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDeekwNluL4ssJ3QAFGPSkFHYYQvZoNbVM&callback=initMap"
    async defer></script>
  </body>
</html>

我在 localhost:8080 上运行 liferay 7 的本地实例。我相信 JavaScript 正在触发,因为我没有正确设置我的 API 密钥,并且我可以在 javascript 控制台中看到它被拒绝。修复我的 API 密钥后,我不再在浏览器的控制台中看到任何错误,但在我的 Portlet 中看不到地图显示。

您发现 view.jsp 有什么问题吗?还是我应该采取另一种方式来解决这个问题?

4

1 回答 1

1

您正在用“liferay”标记这个问题,所以我假设您正在使用您发布的 JSP 作为 portlet 的视图。portlet 决不能包含<html><head>或者<body>因为此标记将由门户添加。

还要注意mapid:如果您将相同的 portlet 添加到页面中两次,这将无法正常工作,因为您最终会得到一个重复的 HTML 元素 id。如果这最终成为问题,请利用<portlet:namespace/>使标识符唯一。如果其他一些 portlet 已经添加了此 ID,您可能还想尝试一下。它可能已经在工作了,只是不可见 - 取决于这个 id 当前已经在哪里使用过。

另外,我不确定当包含在多余的部分中时是否<style>会被忽略。<html><head>尝试<div>使用适当的高度显式设计您的样式。

于 2016-08-25T10:12:48.847 回答