1

我知道这听起来有点奇怪,但情况就是这样……我有一个 JSF 表单,它在底部加载一个“图像查看器”,纯粹用 javascript 实现:

...
<p:fieldset legend="Viewer">
    <p:outputPanel layout="block" styleClass="imageEditorImagePanel" />
</p:fieldset> 
...

以及加载图像编辑器(OpenLayers)的 javascript 代码:

...
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“保存”按钮时,我想以某种方式在我的支持 bean 中提交这个 JSON 对象......特别是我想调用一个 bean 方法来处理 JSON 对象并将其存储为 XML。

有任何想法吗?

4

2 回答 2

0

你不能通过 jQuery 做到这一点。这就是jsf提供<f:ajax>标签的原因,你可以在提交按钮动作中设置它。JSF 与“经典”Web 开发有点不同,在 JSF 中您更多地考虑事件和类似桌面的开发。

于 2013-09-19T14:53:25.117 回答
0

您还可以让您的按钮调用 Rest 服务,该服务将信息传递到需要的位置。Javascript 只需要使用按钮的 onclick 事件调用它。Jax-rs 允许您将使用注释设置为 JSON。我实际上经常使用这种方法。使用您的 JSF Web 应用程序项目创建 Rest 服务真的很容易。

这个答案也可能有助于将数组从javascript传递到back bean

于 2013-09-19T15:00:21.790 回答