Jsf 2 JSF2.0:复合组件中的问题;从支持Bean初始化属性
我正在开发一个Java Web应用程序,使用JSF2和Primefaces作为Web框架。我的应用程序旨在管理摄像头。所有关于摄像机的数据都存储在PostgreSQL数据库中Jsf 2 JSF2.0:复合组件中的问题;从支持Bean初始化属性,jsf-2,primefaces,Jsf 2,Primefaces,我正在开发一个Java Web应用程序,使用JSF2和Primefaces作为Web框架。我的应用程序旨在管理摄像头。所有关于摄像机的数据都存储在PostgreSQL数据库中我有一个JSF视图,其中使用传单的Javascript API显示动态地图。 您可以通过以下链接查看此类地图的示例: 总而言之,我的地图旨在显示摄像机的标记。标记的位置是使用摄影机的属性生成的 我已经创建了一个复合组件及其支持Bean来处理映射。以下是视图的源代码: // 下面是我的支持bean的代码: @FacesCo
我有一个JSF视图,其中使用传单的Javascript API显示动态地图。 您可以通过以下链接查看此类地图的示例: 总而言之,我的地图旨在显示摄像机的标记。标记的位置是使用摄影机的属性生成的
我已经创建了一个复合组件及其支持Bean来处理映射。以下是视图的源代码:
//
下面是我的支持bean的代码:
@FacesComponent(value=“mapponent”)
公共类MapComponent扩展了UINamingContainer{
私有静态最终字符串MAP\u ID\u PROP=“MAP\u ID”;
私有静态最终字符串OSM\u URL\u PROP=“OSM\u URL”;
私有静态最终字符串OSM_ATTRIB_PROP=“OSM_ATTRIB”;
私有静态最终字符串MIN\u ZOOM\u PROP=“MIN\u ZOOM”;
私有静态最终字符串MAX\u ZOOM\u PROP=“MAX\u ZOOM”;
私有静态最终字符串MAP\u X\u PROP=“MAP\u X”;
私有静态最终字符串MAP\u Y\u PROP=“MAP\u Y”;
私有静态最终字符串MAP\u DEFAULT\u ZOOM\u PROP=“MAP\u DEFAULT\u ZOOM”;
私有静态最终字符串MAP\u BASIC\u LAYER\u NAME\u PROP=“MAP\u BASIC\u LAYER\u NAME”;
私有静态最终字符串映射在单击时启用;
私有字符串mapId;
私人字符串osmUrl;
私人字符串osmAttrib;
私有整数最小缩放;
私有整数maxZoom;
私有双mapX;
私人双mapY;
私有整数映射;
私有字符串mapBasicLayerName;
私有布尔mapEnableOnClick;
/**
*Instanties联合国新地图组件。
*/
公共映射组件(){
超级();
mapId=(字符串)AppUtil.getProperty(MAP\u ID\u PROP);
osmUrl=(字符串)AppUtil.getProperty(OSM_URL_PROP);
osmAttrib=(字符串)AppUtil.getProperty(OSM_ATTRIB_PROP);
minZoom=Integer.parseInt((字符串)AppUtil.getProperty(MIN_ZOOM_PROP));
maxZoom=Integer.parseInt((字符串)AppUtil.getProperty(MAX_ZOOM_PROP));
mapX=Double.parseDouble((字符串)AppUtil.getProperty(MAP_X_PROP));
mapY=Double.parseDouble((字符串)AppUtil.getProperty(MAP_Y_PROP));
mapDefaultZoom=Integer.parseInt((字符串)AppUtil.getProperty(MAP_DEFAULT_ZOOM_PROP));
MapBasicClayerName=(字符串)AppUtil.getProperty(映射\基本\图层\名称\属性);
setMapEnableOnClick(Boolean.parseBoolean((String)AppUtil.getProperty(MAP_ENABLE_ON_CLICK_PROP));
}
/**
*Getter:retourne-le-map-id。
*
*@return-le-map-id
*/
公共字符串getMapId(){
返回mapId;
}
/**
*Getter:retourne-le-osm-url。
*
*@return-le-osm-url
*/
公共字符串getOsmUrl(){
返回奥斯穆尔;
}
/**
*获取者:重新发布osm属性。
*
*@return le osm attrib
*/
公共字符串getOsmAttrib(){
返回osmAttrib;
}
/**
*Getter:重播乐敏zoom。
*
*@returnleminzoom
*/
公共整数getMinZoom(){
返回最小缩放;
}
/**
*Getter:重播max zoom。
*
*@return-le-max-zoom
*/
公共整数getMaxZoom(){
返回最大缩放;
}
/**
*获得者:重新获得地图x。
*
*@return-le-map x
*/
公共双getMapX(){
返回mapX;
}
/**
*获得者:重演地图y。
*
*@return-le-map-y
*/
公共双getMapY(){
返回mapY;
}
/**
*Getter:retourne le映射默认缩放。
*
*@return-le地图默认缩放
*/
公共整数getMapDefaultZoom(){
返回默认缩放;
}
/**
*Getter:retourne le映射基本层名称。
*
*@return le地图基本图层名
*/
公共字符串getMapBasicLayerName(){
返回mapBasicLayerName;
}
/**
*设置器:影响映射id。
*
*@param-mapId-le-map-id
*/
公共void setMapId(字符串mapId){
this.mapId=mapId;
}
/**
*Setter:影响osm url。
*
*@param osmUrl le osm url
*/
公共void setOsmUrl(字符串osmUrl){
this.osmUrl=osmUrl;
}
/**
*设定者:影响osm属性。
*
*@param osmAttrib le osm attrib
*/
公共void setOsmAttrib(字符串osmAttrib){
this.osmAttrib=osmAttrib;
}
/**
*设定器:影响最小缩放。
*
*@param minZoom le minZoom
*/
公共无效设置最小缩放(整数最小缩放){
this.minZoom=minZoom;
}
/**
*塞特:影响最大变焦。
*
*@param maxZoom le max zoom
*/
public void setMaxZoom(整数maxZoom){
this.maxZoom=maxZoom;
}
/**
*设定者:影响地图x。
*
*@param mapX le map x
*/
公共void setMapX(双mapX){
this.mapX=mapX;
}
/**
*二传手:影响地图y。
*
*@param-mapY-le-mapY
*/
公共无效设置映射(双映射){
this.mapY=mapY;
}
/**
*Setter:影响贴图的默认缩放。
*
*@param mapDefaultZoom le映射默认缩放
*/
public void setMapDefaultZoom(整数mapDefaultZoom){
this.mapDefaultZoom=mapDefaultZoom;
}
/**
*Setter:影响地图基本图层名称。
*
*@param mapBasicLayerName le地图基本图层名称
*/
public void setMapBasicLayerName(字符串mapBasicLayerName){
this.mapBasicLayerName=mapBasicLayerName;
}
/**
*Getter:retourne-le-map-enable-on-click。
*
*@return-le点击启用地图
*/
公共布尔getMapEnableOnClick(){
返回mapEnableOnClick;
}
/**
*Setter:单击即可启用影响映射。
*
*@param MapEnable单击可启用映射
*/
public void setMapEnableOnClick(布尔mapEnableOnClick){
this.mapEnableOnClick=mapEnableOnClick;
}
}
为了管理我的组件,我还创建了一个支持bean。以下是xhtml源代码:
//
打开弹出式点击功能(填充、横向、横向){
map.closePopup(clusterPopup);
if(map.getZoom()#{cc.maxZoom}){
var pos
# Cartographie OpenStreetMap
map_id=map
osm_attrib=test
min_zoom=1
max_zoom=13
map_x=48.227
map_y=6.611
map_default_zoom=8
map_basic_layer_name=Basique
map_enable_on_click=true
# Cartographie OpenStreetMap
# Marqueur de caméra
padding=20
max_zoom_marker=11
# Marqueur de caméra
<ui:repeat var="marker" value="#{consultationBean.markers}">
<util:mapMarker/>
</ui:repeat>
<ui:repeat var="camera" value="#{consultationBean.cameras}">
<util:mapMarker id="#{camera.code}"/>
</ui:repeat>
@Override
public void encodeBegin(FacesContext context) throws IOException{
padding = Integer.parseInt((String) AppUtil.getProperty(PADDING_PROP));
maxZoom = Integer.parseInt((String) AppUtil.getProperty(MAX_ZOOM_MARKER_PROP));
latitude = (float) 47.67876;
longitude = (float) 6.97061;
super.encodeBegin(context);
}
<h:body>
<!-- INTERFACE -->
<composite:interface componentType="mapMarkersContainer">
<composite:attribute name="cameras" type="java.util.List" />
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
</composite:implementation>
</h:body>
</html>
@FacesComponent(value = "mapMarkersContainer")
public class MapMarkersContainer extends UINamingContainer {
private List<Camera> cameras;
private Integer currentIndex = 0;
public List<Camera> getCameras() {
currentIndex++;
return cameras;
}
public void setCameras(List<Camera> cameras) {
this.cameras = cameras;
}
public Integer getCurrentIndex() {
return currentIndex;
}
public void setCurrentIndex(Integer currentIndex) {
this.currentIndex = currentIndex;
}
}
@FacesComponent(value = "mapMarker")
public class MapMarker extends UINamingContainer {
private static final String PADDING_PROP = "padding";
private static final String MAX_ZOOM_MARKER_PROP = "max_zoom_marker";
private Float longitude;
private Float latitude;
private String popUpContent;
private Integer padding;
private Integer maxZoom;
private Camera camera;
public MapMarker() {
padding = Integer.parseInt((String) AppUtil.getProperty(PADDING_PROP));
maxZoom = Integer.parseInt((String) AppUtil.getProperty(MAX_ZOOM_MARKER_PROP));
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
padding = Integer.parseInt((String) AppUtil.getProperty(PADDING_PROP));
maxZoom = Integer.parseInt((String) AppUtil.getProperty(MAX_ZOOM_MARKER_PROP));
MapMarkersContainer mapMarkersContainer = (MapMarkersContainer) FacesUtils.findComponentById(context,
"mapMarkersContainer");
Integer cameraIndex = mapMarkersContainer.getCurrentIndex();
Camera camera = mapMarkersContainer.getCameras().get(cameraIndex);
latitude = camera.getY();
longitude = camera.getX();
popUpContent = camera.toString();
setId(camera.getNom());
super.encodeBegin(context);
}
public Float getLongitude() {
return longitude;
}
public void setLongitude(Float longitude) {
this.longitude = longitude;
}
public Float getLatitude() {
return latitude;
}
public void setLatitude(Float latitude) {
this.latitude = latitude;
}
public String getPopUpContent() {
return popUpContent;
}
public void setPopUpContent(String popUpContent) {
this.popUpContent = popUpContent;
}
public Integer getPadding() {
return padding;
}
public void setPadding(Integer padding) {
this.padding = padding;
}
public Integer getMaxZoom() {
return maxZoom;
}
public void setMaxZoom(Integer maxZoom) {
this.maxZoom = maxZoom;
}
public Camera getCamera() {
return camera;
}
public void setCamera(Camera camera) {
this.camera = camera;
}
}
<ui:composition template="/xhtml/common/layout.xhtml">
<ui:define name="headTitle">
<h:outputText value="#Cartographie#" />
</ui:define>
<ui:define name="header">
<ui:include src="/xhtml/common/header.xhtml">
<ui:param name="headerClass" value="banner-thin" />
</ui:include>
</ui:define>
<ui:define name="content">
<util:mapMarkersContainer id="mapMarkersContainer"/>
<div id="content" class="content-home ui-corner-bottom">
<h2 class="main-title content-title light-bg light-bordered-top">
<h:outputText value="#Cartographie#" />
</h2>
<h:panelGroup id="mapPanelGroup">
<util:map id="mapContainer">
<ui:repeat id="repeat" var="camera" value="#{consultationBean.cameras}">
<util:mapMarker/>
</ui:repeat>
</util:map>
</h:panelGroup>
</div>
</ui:define>
</ui:composition>
</html>
/**
* Le Class ConsultationBean.
*/
@Controller
@Scope("view")
@SuppressWarnings("serial")
public class ConsultationBean implements Serializable {
/** Le cameras. */
private List<Camera> cameras;
/** Le markers. */
private List<MapMarker> markers;
private MapMarkersContainer mapMarkersContainer;
/** Le camera service. */
@Autowired
private CameraService cameraService;
/**
* Initialise le.
*
* @throws IOException
*/
@PostConstruct
public void init() throws IOException {
cameras = cameraService.findAll();
mapMarkersContainer = (MapMarkersContainer) FacesUtils.findComponentById(FacesContext.getCurrentInstance(),
"mapMarkersContainer");
mapMarkersContainer.setCameras(cameras);
}
/**
* Getter : retourne le markers.
*
* @return le markers
*/
public List<MapMarker> getMarkers() {
return markers;
}
/**
* Setter : affecte le markers.
*
* @param markers le markers
*/
public void setMarkers(List<MapMarker> markers) {
this.markers = markers;
}
public List<Camera> getCameras() {
return cameras;
}
public void setCameras(List<Camera> cameras) {
this.cameras = cameras;
}
}