将JavaScript对象从velocity模板传递到Java
我试图将一个Java脚本对象从.vm文件传递到Java类将JavaScript对象从velocity模板传递到Java,javascript,java,javascript-objects,velocity,Javascript,Java,Javascript Objects,Velocity,我试图将一个Java脚本对象从.vm文件传递到Java类 var createReqFields = {BookName:"Effective Java",Author:"Joshua Bloch"}; 我可以在浏览器控制台中查看变量createReqFields中的值。我正试图将这个对象从.vm文件传递给Java类 <td> <a id="saveAudit" href="/bookshop/inventoryList.do?action=saveBookInfo&
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>
我可以看到控件被传递到我的action类,我可以看到一些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;
//html
//JS------------------V应引用-----------------V
var createReqFields={“BookName”:“Effective Java”,“Author”:“Joshua Bloch”};
//可能会改变这一点------------------VV
var url=“/bookshop/inventoryList.do?action=saveBookInfo&BookName=”;
url+=createReqFields.BookName+“&Author=”;
url+=createReqFields.Author;
//广告至href
var btn=document.getElementById('saveAudit');
btn.href=url;
您需要确保在加载元素后包含JS。您需要解析URL并在后端重建对象。您正在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;
//html
//JS------------------V应引用-----------------V
var createReqFields={“BookName”:“Effective Java”,“Author”:“Joshua Bloch”};
//可能会改变这一点------------------VV
var url=“/bookshop/inventoryList.do?action=saveBookInfo&BookName=”;
url+=createReqFields.BookName+“&Author=”;
url+=createReqFields.Author;
//广告至href
var btn=document.getElementById('saveAudit');
btn.href=url;
您需要确保在加载元素后包含JS。您需要解析URL并在后端重新构建对象。这个问题已经有了非常合适的答案,但我打算添加我的问题,以便做出贡献… 了解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');
}
});
我希望这个问题能解决。这个问题已经有了一个非常恰当的答案,但我将添加我的答案,以期有所贡献。 了解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');
}
});
我希望能成功。这是我通过这个物体的唯一方法吗。因为此对象将包含超过25个字段。在URL中添加所有字段不是一个好做法,对吗?如果我错了,请纠正我,我想是的。如果你传递那么多东西,我不会使用GET请求。我会使用表单中的POST。在这种情况下,我唯一能做的就是使用ajax?我应该只使用Java中的Restful服务来捕获这个对象吗?或者其他不使用Restful服务的方式?AJAX可能是一种选择,具体取决于您要做什么。但在发送对象之前,必须确保使用有效的JSON构造对象。然后是后端的简单JSON解析。REST服务是您可以选择的另一种方式,但我认为AJAX会更简单。非常感谢。我试试看。这是我唯一能通过这个物体的方法吗。因为此对象将包含超过25个字段。在URL中添加所有字段不是一个好做法,对吗?如果我错了,请纠正我,我想是的。如果你传递那么多东西,我不会使用GET请求。我会使用表单中的POST。在这种情况下,我唯一能做的就是使用ajax?我应该只使用Java中的Restful服务来捕获这个对象吗?或者其他不使用Restful服务的方式?AJAX可能是一种选择,具体取决于您要做什么。但在发送对象之前,必须确保使用有效的JSON构造对象。然后是后端的简单JSON解析。REST服务是您可以选择的另一种方式,但我认为AJAX会更简单。非常感谢。我试着在我的文档中添加这个ajax调用。但我看到的错误如下:错误500:org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为org.springframework.context.ApplicationContextException:无法加载URL[/views/addInventoryInfo.vm]的Velocity模板;嵌套的异常是org.apache.velocity.exception.ParseErrorException:在/views/addInventoryInfo.vm的第113行第40列遇到“{”,应为“(………)\\\\”…“\\\”…“*\\”…“*\\”…“{…”之一…修复了它…由于$是velocity变量本身的一部分,它试图以同样的方式转换$.ajax({});因此改为jQuery.ajax({});非常感谢您的建议我尝试在document.ready中添加此ajax调用。但我发现错误如下:错误500:org.springf