将JavaScript对象从速度模板传递到Java

时间:2017-01-26 14:25:55

标签: javascript java javascript-objects velocity

我正在尝试将我的.vm文件中的Java Script对象传递给我的Java类。

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

我能够在浏览器控制台中看到变量createReqFields中的值。我试图从我的.vm文件中将此对象传递给我的Java类。

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

我能够看到控件已经传递给我的动作类,我可以看到很少的SOP而不是这个对象。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您在网址中传递字符串“createReqFields”。您想要使用该变量。即使你只是使用变量,JS也会将它转换为href中的[Object object],这将不是你想要的。我要做的是用JS:

设置这个锚的href属性
// 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并在后端重建对象。

答案 1 :(得分:1)

这个问题已经有了一个非常恰当的答案,但我想补充一下我的意图......

了解JavaScript和Velocity的用途可以帮助解决这个问题。

Velocity在服务器端处理,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');
    }
});

我希望这样做。