Problem 1: Once the marker is placed, it cannot be placed again.
这个问题是由以下原因引起的:
>您已将纬度和经度绑定到不同的bean(NewOfferSupportController),而不是包含地图模型(MapBean)的bean。您应该在PrimeFaces展示区中使用MapBean示例作为NewOfferSupportController bean的设计起点。它存储标记集。隐藏输入必须指向该bean,因为在addMarker()方法中,将添加这些值。从展示示例中,您只需重命名MapBean类名称,然后通过#{newOfferSupportController}重命名视图中的#{mapBean}引用。
>您的NewOfferSupportController bean是请求作用域,而它应该是视图作用域。
@ManagedBean
@ViewScoped
public class NewOfferSupportController implements Serializable {}
只要你使用Ajax的相同形式进行交互,视图范围bean就可以生效。但是请求范围bean在每个请求(因此也在每个Ajax请求!)上被重新创建,从而破坏在地图中放置的标记和在添加标记之前输入的标记。
Problem 2: In the same form where the map is there are some other elements such as text fields. Actually the form does not get submitted at all(This didn’t occur before i added the map), why is the map disrupting the validation?
这对我有用。这可能是因为您的NewOfferSupportController已放置在请求范围而不是视图范围中。
总结一下,这里是我在我的测试中使用的代码:
视图:
model="#{mapBean.mapModel}" onPointClick="handlePointClick(event);" widgetVar="map" />
update="messages" oncomplete="markerAddComplete()"/>
(我没有更改的示例中的代码,只是添加不变)
豆:
@ManagedBean
@ViewScoped
public class MapBean implements Serializable {
private MapModel mapModel;
private String title;
private double lat;
private double lng;
private String input;
public MapBean() {
mapModel = new DefaultMapModel();
}
public void addMarker(ActionEvent actionEvent) {
mapModel.addOverlay(new Marker(new LatLng(lat, lng), title));
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Added", "Lat:" + lat + ", Lng:" + lng));
}
public void submit() {
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Form submitted", "Amount markers: " + mapModel.getMarkers().size() + ", Input: " + input));
}
public void addMessage(FacesMessage message) {
FacesContext.getCurrentInstance().addMessage(null, message);
}
// Getters+setters.
}