2013-09-19 3 views
1

Я знаю, что это будет звучать немного странно, но вот в этом случае ... У меня есть форма 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.

Любые идеи?

ответ

0

Вы не можете сделать это через jQuery. Вот почему jsf предоставляет тег <f:ajax>, вы можете установить его в действии кнопки отправки. JSF отличается от «классической» веб-разработки, в JSF вы больше думаете о событиях и о настольных разработках.

+0

Омара спасибо за реагирование. Я знаю о JSF. Проблема заключается в том, что мой Image Viewer (google map like) полностью построен на javascript и что фигуры на изображении рисуются динамически. Как я могу представить строку JSON, представляющую их обратно в мой компонент? – thanili

+0

Когда вы выполняете действие ajax в jsf, вы можете «обновить» весь контейнер такими div. Тем не менее, вы можете обновить контейнер ImageViewer после завершения действия ajax. Дело с JSF заключается в том, чтобы использовать на более высоком уровне сеть, с ее преимуществами и недостатками. – Omar

+0

Другой способ - сохранить код jQuery и использовать сервлет, который предоставляет JSON в качестве ответа. – Omar

0

Вы также можете позвонить своей службе Rest, которая передает информацию, где она должна быть. Javascript просто нужно вызвать его, используя событие onclick кнопки. Jax-rs позволяет вам установить аннотацию потребления на JSON. Я использую этот подход довольно часто. Его очень легко создать службу Rest с вашим проектом веб-приложений JSF.

Этот ответ также может быть полезен pass array from javascript to back bean