Я знаю, что это будет звучать немного странно, но вот в этом случае ... У меня есть форма JSF, которая в нижней части загружает «средство просмотра изображений», реализованное исключительно с помощью javascript:javascript JSON object to JSF back bean
...
<p:fieldset legend="Viewer">
<p:outputPanel layout="block" styleClass="imageEditorImagePanel" />
</p:fieldset>
...
и Javascript код для загрузки редактора изображений (OpenLayers):
...
function setImageEditorHeight(){
imageEditorID = $(".imageEditorImagePanel")[0].id;
....
}
...
function initialiseMap(){
...
map = new OpenLayers.Map(imageEditorID, options);
...
imageLayer = new OpenLayers.Layer.TMS(imgURL, "", {
url : '',
serviceVersion : '.',
layername : '.',
alpha : true,
type : 'png',
getURL : overlay_getTileURL,
transitionEffect: 'resize'
});
map.addLayer(imageLayer);
var vlayer = new OpenLayers.Layer.Vector("Editable");
map.addLayer(vlayer);
//add controls for drawing shaped on the map like:
var drawPointControl = new OpenLayers.Control.DrawFeatureOpt(vlayer, OpenLayers.Handler.Point,
{title:'Draw a point', text: 'Point','displayClass':'olControlDrawFeaturePoint'});
...
//add a save button to store shapes as geoJSON object
var save = new OpenLayers.Control.Button({
title: 'Save', text: 'Save',
trigger: function(){
var GEOJSON_PARSER = new OpenLayers.Format.GeoJSON();
var vectorLayerAsJson = GEOJSON_PARSER.write(vlayer.features);
alert(vectorLayerAsJson);
//i want something similar
//just for demonstrating, instead of URL i would like a way to post JSON object to bean
jQuery.ajax({
type: 'POST',
url: '/ajax/add',
dataType: 'json',
data: {"vLayerAsJson": vectorLayerAsJson}
});
}, 'displayClass': "olControlSaveFeatures"
});
...
panel.addControls([hand, zoomToDrawControl, drawPointControl, drawPathControl, drawPolygonControl, drawRegularPolygonControl,
new OpenLayers.Control.ZoomToMaxExtent({title:"Zoom to the max extent", text: "World"}), modifyFeatureControl, deleteFeatureControl, save]);
...
map.addControl(panel);
...
Наконец, когда я нажимаю кнопку JavaScript «Сохранить», я хотел бы, чтобы каким-то образом представить в моем бэк-боба это JSON object ... В частности, я хотел бы вызвать метод bean для обработки объекта JSON и его сохранения как XML.
Любые идеи?
Омара спасибо за реагирование. Я знаю о JSF. Проблема заключается в том, что мой Image Viewer (google map like) полностью построен на javascript и что фигуры на изображении рисуются динамически. Как я могу представить строку JSON, представляющую их обратно в мой компонент? – thanili
Когда вы выполняете действие ajax в jsf, вы можете «обновить» весь контейнер такими div. Тем не менее, вы можете обновить контейнер ImageViewer после завершения действия ajax. Дело с JSF заключается в том, чтобы использовать на более высоком уровне сеть, с ее преимуществами и недостатками. – Omar
Другой способ - сохранить код jQuery и использовать сервлет, который предоставляет JSON в качестве ответа. – Omar