<p:gmap 组件的绑定不起作用 - Primefaces 3.4.1

Posted

技术标签:

【中文标题】<p:gmap 组件的绑定不起作用 - Primefaces 3.4.1【英文标题】:binding of <p:gmap component doesn't work - Primefaces 3.4.1 【发布时间】:2012-11-02 21:49:48 【问题描述】:

我在应用程序中使用 p:gmap 组件,但是当我尝试使用绑定属性来引用 bean 中的 GMap 时,它不起作用并且地图不显示。

JSF 代码:

<p:gmap binding="#mapBean.map" center=" -26.9995, -49.686" zoom="11" type="ROADMAP" />

支持 bean 代码:

public GMap getMap() 
    map = new GMap();
    map.setCenter("-26.9995, -49.686");
    map.setZoom(11);
    map.setType("ROADMAP");
    map.setModel(geoModel);
    map.setStyle("width:850px;height:450px");
    map.setWidgetVar("vMap");
    return map;

当我在没有绑定的情况下使用这个组件时,它工作正常......

Primefaces 版本 3.4.1; 玻璃鱼 3.1.2.2

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

我发现与您相关的相同问题...当我使用绑定属性在托管 Bean 中引用 GMap 时,地图未呈现。

我注意到文件 gmap.js 没有被加载,因此 GMap 也没有被渲染。

我没有找到这个问题的原因,但我找到了解决它的方法,但不是一个优雅的方法。 :D

在将gmap.js复制到项目目录结构的文件系统后,我在我的xhtml文件中添加了这一行。

<h:head>
    ...
    <h:outputScript library="primefaces" name="gmap/gmap.js" />
    ...
</h:head>

希望对您有所帮助!祝你好运! :D

【讨论】:

【参考方案2】:

另一种方法是在 Backed Bean(或任何呈现这种情况的组件)上创建 GMap 实例,创建 Component xhml 视图,删除绑定 xhtml 属性并匹配两者的每个属性,如下例所示:

豆子:

// #viewBean
private GMap googleMap;
@PostConstruct
public void onPostConstruct()
    googleMap.setDisableDoubleClickZoom(Boolean.TRUE);
    googleMap.setScrollWheel(Boolean.FALSE);
    googleMap.setCenter(getMapCenterString());
    googleMap.setZoom(mapZoomLevel);
    googleMap.setType("NORMAL");
    googleMap.setFitBounds(Boolean.FALSE);
    // etc...

// getter and setter of googleMap

XHTML 视图:

<p:gmap id="gmap"
     center="#viewBean.googleMap.center" 
     zoom="#viewBean.googleMap.zoom"
     type="#viewBean.googleMap.type"
     model="#viewBean.mapModel"
     scrollWheel="#viewBean.googleMap.scrollWheel"
     disableDoubleClickZoom="#viewBean.googleMap.disableDoubleClickZoom"
     etc... />

这样我们就可以将组件的控制权保留在 backed bean 中。

虽然 primefaces 修复了这个错误。

【讨论】:

这是一个关于 PF 3.4.1 的问题,一个 4 岁的版本。请说明您的版本。如果是 3.4.1,请检查更新的版本,不要“只是”声明它(仍然?)是一个错误。 使用 PF 6.0 时遇到了这个问题,这就是我来到这里的原因(搜索解决方案)。

以上是关于<p:gmap 组件的绑定不起作用 - Primefaces 3.4.1的主要内容,如果未能解决你的问题,请参考以下文章

从子组件到父组件的绑定字符串字段不起作用

vue双向绑定时添加.sync不起作用的原因

当绑定项为对象并动态修改时,单向绑定不起作用

组件绑定不起作用:Angularjs

为啥动态组件创建中的属性绑定不起作用?

Vue动态绑定到类不起作用