2017-01-26 2 views
0

J'essaie de transmettre un objet Java Script de mon fichier .vm à ma classe Java. Je peux voir les valeurs dans ma variable createReqFields dans la console du navigateur. J'essaie de passer cet objet à ma classe Java à partir de mon fichier .vm. Je peux voir que le contrôle a été transmis à ma classe d'action et que je pouvais voir quelques SOP mais pas cet objet. Comment puis-je faire ce travail?Passer un objet JavaScript du modèle de vitesse à Java

Répondre

1

Vous passez la chaîne "createReqFields" dans votre URL. Vous voulez utiliser la variable. Même si vous n'utilisez que la variable, JS la convertira en [Objet objet] dans le fichier href et ce ne sera pas ce que vous voulez. Ce que je voudrais faire est de définir l'attribut href de cette ancre avec JS:

// html 
<a id="saveAudit" href=""> </a> 

// JS ----------------V should be quoted ----------V 
var createReqFields = {"BookName":"Effective Java","Author":"Joshua Bloch"}; 
// would probably change this ----------------------------VV 
var url ="/bookshop/inventoryList.do?action=saveBookInfo&BookName="; 
url += createReqFields.BookName + "&Author="; 
url += createReqFields.Author; 

// ad to href 
var btn = document.getElementById('saveAudit'); 
btn.href = url; 

Vous voulez vous assurer d'inclure votre JS après que l'élément a été chargé. Vous devrez analyser l'URL et reconstruire l'objet sur le backend.

+0

Est-ce la seule façon que je peux passer cet objet. Parce que cet objet sera plus de 25 champs. Ce n'est pas une bonne pratique d'ajouter tous les champs dans l'URL non? S'il vous plaît corrigez-moi si je me trompe – BrinzN

+0

Je le pense. Si vous passez beaucoup de choses, je n'utiliserais pas une requête GET. J'utiliserais POST d'un formulaire. – Cruiser

+0

Dans ce cas, seul moyen que je pourrais faire est d'utiliser ajax? Dois-je utiliser uniquement des services Restful en Java pour capturer cet objet? Ou de toute autre manière sans utiliser les services de repos aussi? – BrinzN

0

Cette question a déjà une réponse très appropriée, mais je vais ajouter le mien avec l'intention de contribuer ...

Comprendre ce JavaScript et Velocity sont destinés peut aider beaucoup dans la résolution de ce problème.

Velocity est traité dans le côté serveur et JavaScript se fait sur côté client.

Lorsque vous indiquez que vous souhaitez transmettre un objet JS à Java, vous voulez l'envoyer au serveur. Vous pouvez essentiellement faire une requête asynchrone au serveur, en publiant les données sur le serveur, puis utiliser Java pour le lire.

var createReqFields = {BookName:"Effective Java",Author:"Joshua Bloch"}; 

$.ajax({ 
    type: 'POST', 
    url: '...', 
    dataType: 'JSON', 
    data: 'bookName=' + createReqFields.BookName + '&author=' + createReqFields.Author, 
    success: function(data) { 

    }, 
    error: function(data) { 
     alert('fail'); 
    } 
}); 

Une autre façon est d'afficher l'ensemble de l'objet et utiliser Java pour l'analyser ...

$.ajax({ 
    type: 'POST', 
    url: '...', 
    dataType: 'JSON', 
    data: { 
     loadProds: 1, 
     createReqFields: JSON.stringify(createReqFields) //Serialize it so that it would be easy to send 
    }, 
    success: function(data) { 

    }, 
    error: function(data) { 
     alert('fail'); 
    } 
}); 

J'espère que fonctionne.

+0

J'ai essayé d'ajouter cet appel ajax dans mon document.ready. voir l'erreur comme ci-dessous: Erreur 500: org.springframework.web.util.NestedServletException: Le traitement de la requête a échoué; l'exception imbriquée est org.springframework.context.ApplicationContextException: Impossible de charger le modèle Velocity pour l'URL [/views/addInventoryInfo.vm]; l'exception imbriquée est org.apache.velocity.exception.ParseErrorException: "{" rencontré à la ligne 113, colonne 40 de /views/addInventoryInfo.vm – BrinzN

+0

Attendait l'un de: "(" ... ... ... ... "##" ... "\\\\" ... "\\" ... ... "* #" ... "* #" ... ... ... ... ... ... ... ... ... ... "{ "..."} "... – BrinzN

+0

Correction de ... Comme $ fait partie de la variable de vélocité elle-même essaye de convertir $ .ajax ({}); de la même façon. Merci beaucoup pour votre suggestion – BrinzN