2017-01-26 5 views
0

Я пытаюсь передать объект Java Script формы моего .vm-файла в свой Java-класс.Передача объекта JavaScript из шаблона скорости в Java

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

Я могу видеть значения в моей переменной createReqFields в консоли браузера. Я пытаюсь передать этот объект в свой Java-класс из моего .vm-файла.

<td> 
    <a id="saveAudit" href="/bookshop/inventoryList.do?action=saveBookInfo&createReqFields=createReqFields" type="button" class="portalButton">Save Details</a> 
</td> 

Я могу видеть, что элемент управления передан моему классу действий, и я мог видеть несколько SOP, но не этот объект. Как я могу сделать эту работу?

ответ

1

Вы передаете строку «createReqFields» в своем URL-адресе. Вы хотите использовать переменную. Даже если вы просто используете переменную, JS преобразует ее в объект [Object object] внутри href, и это будет не то, что вы хотите. Что я хотел бы сделать, это установить атрибут HREF этого якоря с 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; 

Вы хотите, чтобы убедиться, что вы включили ваш JS после загрузки элемента. Вам необходимо проанализировать URL-адрес и восстановить объект на сервере.

+0

Это единственный способ передать этот объект. Потому что этот объект будет содержать более 25 полей. Неправильно ли вы правильно добавлять все поля в URL? Пожалуйста, поправьте меня, если я ошибаюсь – BrinzN

+0

Думаю, что да. Если вы передаете много вещей, я бы не использовал запрос GET. Я бы использовал POST из формы. – Cruiser

+0

В этом случае только способ, который я мог бы сделать, это использовать ajax? Должен ли я использовать только Restful services в Java для захвата этого объекта? Или любым другим способом, не используя Restful services тоже? – BrinzN

0

Этот вопрос уже имеет очень подходящий ответ, но я собираюсь добавить мое с намерением способствовать ...

Понимание того, что JavaScript и скорости предназначены для могут очень помочь в решении этой проблемы.

Скорость обрабатывается в серверной сторонеи JavaScript делается на стороне клиента.

Когда вы говорите, что хотите передать объект JS в java, вы хотите отправить его на сервер. Вы могли бы в основном сделать асинхронный запрос на сервер, опубликовать данные на сервере и затем использовать Java для его чтения.

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'); 
    } 
}); 

Другой способ, чтобы отправить весь объект и использовать Java, чтобы разобрать его ...

$.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'); 
    } 
}); 

Я надеюсь, что работает.

+0

Я попытался добавить этот вызов ajax внутри моего документа. увидев ошибку, как показано ниже: Ошибка 500: org.springframework.web.util.NestedServletException: обработка запроса не удалась; Вложенное исключение - org.springframework.context.ApplicationContextException: Не удалось загрузить шаблон Velocity для URL [/views/addInventoryInfo.vm]; Вложенное исключение - org.apache.velocity.exception.ParseErrorException: Encountered "{" в строке 113, столбец 40 в /views/addInventoryInfo.vm – BrinzN

+0

Ожидалось одно из: "(" ... ... ... ... "##" ... "\\\\" ... "\\" ... ... "* #" ... "* #" ... ... ... ... ... ... ... ... ... ... "{ "..."} "... – BrinzN

+0

Исправлено ... Поскольку $ является частью самой переменной скорости, она пытается конвертировать $ .ajax ({}) таким же образом, поэтому изменилась на jQuery.ajax ({}), Спасибо тонну за ваше предложение – BrinzN