我在使用PrimeFaces时遇到bean和JSF视图的问题。我需要使用与标记相关联的Google地图坐标来填充表格。差不多完成了,路上只有一些小东西。有人可以给出指示吗?
这是豆子:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;
@SuppressWarnings("serial")
@ManagedBean
public class MapBean implements Serializable {
private MapModel emptyModel;
private String title;
private double lat;
private double lng;
private List<LatLng> coordenadas;
public List<LatLng> getCoordenadas() {
return coordenadas;
}
public void setCoordenadas(List<LatLng> coordenadas) {
this.coordenadas = coordenadas;
}
public MapBean() {
emptyModel = new DefaultMapModel();
}
public MapModel getEmptyModel() {
return emptyModel;
}
public void addMessage(FacesMessage message) {
FacesContext.getCurrentInstance().addMessage(null, message);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public void populateTable(List<LatLng> lista){
lista.add(new LatLng(getLat(), getLng()));
}
public void addMarker(ActionEvent actionEvent) {
Marker marker = new Marker(new LatLng(lat, lng), title);
coordenadas = new ArrayList<LatLng>();
emptyModel.addOverlay(marker);
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Added", "Lat:" + lat + ", Lng:" + lng));
populateTable(coordenadas);
}
}
这是视图,带有主要面孔标签。会发生什么:标记被添加,其他一切工作,但坐标不会到表,我不知道为什么。尽管如此仍在尝试:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> </script>
</h:head>
<h:body>
<h:form prependId="false">
<p:growl id="messages" showDetail="true" />
<p:gmap id="gmap" center="-3.12808313259846,-59.9729442607909" zoom="13" type="ROADMAP"
style="width:1200px;height:600px"
model="#{mapBean.emptyModel}"
onPointClick="handlePointClick(event);"
widgetVar="map" />
<p:dialog widgetVar="dlg" effect="FADE" effectDuration="0.5" fixedCenter="true" closable="false" >
<h:panelGrid columns="2">
<h:outputLabel for="title" value="Title:" />
<p:inputText id="title" value="#{mapBean.title}" />
<f:facet name="footer">
<p:commandButton value="Add"
actionListener="#{mapBean.addMarker}"
update="messages"
oncomplete="markerAddComplete()"/>
<p:commandButton value="Cancel" onclick="return cancel()"/>
</f:facet>
</h:panelGrid>
<h:inputHidden id="lat" value="#{mapBean.lat}" />
<h:inputHidden id="lng" value="#{mapBean.lng}" />
</p:dialog>
<p:dataTable value="#{mapBean.coordenadas}" var="latLng">
<p:column headerText="Latitude">
<h:outputText value="#{mapBean.lat}" />
</p:column>
<p:column headerText="Longitude">
<h:outputText value="#{mapBean.lng}" />
</p:column>
</p:dataTable>
非常感谢。
答案 0 :(得分:0)
视图中的这些更改解决了问题:
<p:commandButton value="Add"
actionListener="#{mapBean.addMarker}"
update="messages,tabela"
oncomplete="markerAddComplete()"/>
<p:commandButton value="Cancel" onclick="return cancel()"/>
必须更新“tabela”,这是另一个primefaces元素的id:
<p:dataTable id="tabela" value="#{mapBean.coordenadas}" var="LatLng">
<p:column headerText="Latitude">
<h:outputText value="#{LatLng.lat}" />
</p:column>
<p:column headerText="Longitude">
<h:outputText value="#{LatLng.lng}" />
</p:column>
</p:dataTable>