我正在尝试将我的.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而不是这个对象。我怎样才能做到这一点?
答案 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');
}
});
我希望这样做。