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

Passing JavaScript object from velocity template to Java

我正在尝试将 Java 脚本对象从我的 .vm 文件传递​​到我的 Java class.

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

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

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

我能够看到控制权已传递到我的操作 class,我能看到很少的 SOP,但看不到这个对象。我怎样才能使这项工作?

您正在 url 中传递字符串 "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 并在后端重建对象。

这个问题已经有了一个非常合适的答案,但我将添加我的答案以做出贡献...

了解 JavaScript 和 Velocity 的用途对解决这个问题有很大帮助。

速度在 server-side 中处理,Java脚本在 client-side 中完成.

当您说要将 JS 对象传递给 java 时,您希望将其发送到服务器。您基本上可以向服务器发出异步请求,post 将数据发送到服务器,然后使用 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');
    }
});

另一种方法是 post 整个对象并使用 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');
    }
});

希望一切顺利。