Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF后台bean的javascript JSON对象_Javascript_Jsf_Primefaces_Openlayers - Fatal编程技术网

JSF后台bean的javascript JSON对象

JSF后台bean的javascript JSON对象,javascript,jsf,primefaces,openlayers,Javascript,Jsf,Primefaces,Openlayers,我知道这听起来有点奇怪,但事实是。。。我有一个JSF表单,它在底部加载一个“图像查看器”,完全用javascript实现: ... <p:fieldset legend="Viewer"> <p:outputPanel layout="block" styleClass="imageEditorImagePanel" /> </p:fieldset> ... 最后,当我按下javascript“保存”按钮时,我想在我的支持bean中提交这个JSON

我知道这听起来有点奇怪,但事实是。。。我有一个JSF表单,它在底部加载一个“图像查看器”,完全用javascript实现:

...
<p:fieldset legend="Viewer">
    <p:outputPanel layout="block" styleClass="imageEditorImagePanel" />
</p:fieldset> 
...
最后,当我按下javascript“保存”按钮时,我想在我的支持bean中提交这个JSON对象。。。我特别想调用bean方法来处理JSON对象并将其存储为XML


有什么想法吗?

你不能通过jQuery来实现。这就是为什么jsf提供了
标记,您可以在submit按钮操作中设置它。JSF有点不同于“经典”web开发,在JSF中,您更多地考虑事件和桌面式开发。

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


这个答案可能也会有所帮助

Omar感谢您的回复。我了解JSF。问题是我的图像查看器(类似谷歌地图)完全是基于javascript构建的,图像上的形状是动态绘制的。如何将代表它们的JSON字符串提交回我的bean?当您在jsf中执行ajax操作时,您可以“更新”整个容器,例如div。也就是说,您可以在ajax操作完成后更新ImageViewer容器。JSF的好处是在更高的层次上使用web,它有优点也有缺点。另一种方法是保留jQuery代码,并使用一个提供JSON作为响应的Servlet。
...
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); 
    ...