将 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');
}
});
希望一切顺利。
我正在尝试将 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');
}
});
希望一切顺利。