尝试在JSF中显示带有gmap对象的地图

时间:2012-05-21 11:28:35

标签: jsf-2

我正在使用JSF2,我想显示一个带有gmap对象的地图。正如我所看到的,gmap对象不再存在richfaces 4.x,所以我尝试导入gmap4jsf.jar来渲染我的地图......

为了得到一个例子,我从Richfaces演示中获取了部分代码:Richfaces live demo

地图显示效果很好,但如果我想用rich:面板中的jsf元素控制它(更改类型,缩放......),我会在Firebug中收到错误:“map is undefined”。 .. 有人可以帮我找出问题,因为我没有在其他帖子中找到答案...... 这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:m="http://code.google.com/p/gmaps4jsf/"><h:head><title>JSF 2.0: Ajax Support</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="../css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=myPersonnalKeyIsWrittenHere"></script>
<script type="text/javascript"
    src="http://code.jquery.com/jquery-1.7.1.js"></script>

<style>.optionList {height: 30px;}</style></h:head><h:body>
<div id="container">
    <ui:include src="tpl/menu.xhtml" />
    <h1>Gmap4Jsf</h1>
    <div align="center">

        <f:view contentType="text/html">
            <h:panelGrid columns="2">
                <h:form id="mapform" prependId="false">
                    <m:map var="map" mapVar="map" gmapKey="#{gmapBean.gmapkey}" id="map" /> 
                </h:form>
                <h:panelGroup>
                    <h:form>

                        <rich:tabPanel switchType="ajax" width="350" height="400">
                            <rich:tab label="Using Google Map API">
                                <h:panelGrid columns="2" columnClasses="optionList">
                                    <h:outputText value="Controls:" />
                                    <h:panelGroup>
                                        <a href="javascript: void 0" onclick="map.hideControls()">Hide</a>
                                        <a href="javascript: void 0" onclick="map.showControls()">Show</a>
                                        <br />
                                    </h:panelGroup>

                                    <h:outputText value="Zoom:" />
                                    <rich:inputNumberSlider id="zoom" showInput="false"
                                        minValue="1" maxValue="18" value="#{gmapBean.zoom}"
                                        onchange="map.setZoom(this.value)" />


                                    <h:outputText value="Map Type:" />
                                    <h:panelGroup>
                                        <a href="javascript: void 0"
                                            onclick="map.setMapType(G_NORMAL_MAP)">Normal</a>
                                        <a href="javascript: void 0"
                                            onclick="map.setMapType(G_SATELLITE_MAP)">Satellite</a>
                                        <a href="javascript: void 0"
                                            onclick="map.setMapType(G_HYBRID_MAP)">Hybrid</a>
                                        <br />
                                    </h:panelGroup>

                                </h:panelGrid>
                            </rich:tab>

                            <rich:tab label="Using Ajax with JSON">
                                <rich:dataGrid var="place" value="#{gmapBean.point}"
                                    columns="2">
                                    <h:graphicImage onclick="showPlace('#{place.id}')"
                                        style="cursor:pointer" value="resource://#{place.pic}" />
                                </rich:dataGrid>
                            </rich:tab>
                        </rich:tabPanel>
                    </h:form>
                </h:panelGroup>
            </h:panelGrid>
        </f:view>
    </div>
</div>

1 个答案:

答案 0 :(得分:1)

好的,我发现了......

我必须定义JSF生成的Javascript变量的名称。 所以,我刚刚添加了attribut&#34; jsVariable&#34;到我的gmap元素。

<m:map jsVariable="map" var="map" mapVar="map" gmapKey="#{gmapBean.gmapkey}" id="map" />

再见