2013-12-16 29 views
1

在以下情況下需要一些幫助:liferay,jsf。如何JavaScript json對象保存到數據庫

我已經設置了一個應用程序作爲Liferay portlet,我使用JSF/Primefaces來創建我的視圖。對於數據建模,我使用Hibernate。

在某個視圖中,我加載了一個所謂的「圖像註釋器」,它使用Javascript工具來收集用戶輸入(圖像畫布上的註釋)。這些信息我希望能夠保存在文件/數據庫中,然後在用戶再次編輯特定圖像時重新使用。

這是我的觀點:

<h:head> 
    <script src="#{facesContext.externalContext.requestContextPath}/js/OpenLayers.js" /> 
    <script src="#{facesContext.externalContext.requestContextPath}/js/image-viewer.js" /> 
    <script src="#{facesContext.externalContext.requestContextPath}/js/xml2js/xml2json.js" /> 
    <script src="#{facesContext.externalContext.requestContextPath}/js/xml2js/xml2json.min.js" /> 
    ... 
</head> 
... 
<p:fieldset legend="Viewer"> 
    <p:outputPanel layout="block" styleClass="imageEditorImagePanel" /> 
</p:fieldset> 
.... 

所以圖像和相關的JScript工具(的OpenLayers)在imageEditorPanel佔位符被加載。

的JavaScript代碼(圖像viewer.js)聚集在一個JSON(以GeoJSON)對象的用戶輸入,並且該對象我想傳遞給背面豆控制器當選擇保存按鈕(JScript中):

... 
//define save button 
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); 
     ... 

所以我想 'vectorLayerAsJson' 對象傳遞給Java控制器(backbean)...

我想實現一個Ajax調用,比如:

jQuery.ajax({ 
    type: 'POST', 
    url: 'imageannotations', 
    contentType: 'application/json', 
    data: vectorLayerAsJson, 
    success : function(data) { alert("success")} 
}); 

可以在大家幫助我怎麼做這個ajax請求,以及我將如何實現我的控制器類?

回答

1

您可以使用primefaces p:remoteCommand通過Javascript發起對java託管bean的調用。回答如何發送字符串作爲參數可以找到here

在託管bean/JAVA控制器,只是有吸氣劑/設定器String變量和動作方法來啓動反序列化(以下是未測試的代碼):

@ManagedBean(name="testBean") 
public class Test { 
    public String actionOnString() { 
    String value = FacesContext.getCurrentInstance() 
        .getExternalContext().getRequestParameterMap().get("param"); 
    // do your unserialize and actions here 
    return ""; 
    } 
} 

在JSF有類似

<p:remoteCommand name="sendJSONToServer" action="#{testBean.actionOnString}" /> 

和如JavaScript上所需的位置

sendJSONToServer({param: vectorLayerAsJson}); 

壽ld做這個工作。

也可以通過PrimePush直接使用ajax-push,使用athmosphere框架。可能的話,這可能是你試圖達到的目標。

更新1

當然,當你得到一個JSON-對象序列化(這麼說「N字符串格式),你必須JSONize它在Javascript中 - 這個答案"How to parse JSON in JavaScript"可以幫助你進一步關於該。

希望它可以幫助...

+0

我不認爲這正是我想要的,因爲一切都是通過JavaScript構建的。其實我有隻是一個佔位符「imageEditorImagePanel」它加載的成像工具。該成像工具具有多個生成json對象的圖像處理子工具。所以我想直接從我的JavaScript代碼傳遞json對象到託管bean。 – thanili

+0

那麼,你會怎麼做/你打算如何接收服務器端的json數據?只需通過getter/setter將其設置爲String,然後從那裏開始反序列化就是我們在前項目中做的。 –

+0

就像那樣。由於這是我第一次實現這樣的功能,我試圖實現的第一件事就是將我的JSON對象發佈到java bean。然後,我要麼在那裏操縱它,要麼在發送之前對其進行後處理。但在這個階段,我的興趣點就是做一個合適的ajax通話,並通過我的後背豆接收它!希望它很清楚。 – thanili

相關問題