Spring:在服务器和客户端之间传递数据(Java对象到JS对象)
Spring: passing data between server and client (Java objects to JS objects)
我想在我的服务器(使用Spring)和客户端(在ExtJS中)之间实现透明的数据传递。
在服务器端,我让 Spring 控制器返回 ModelAndView 对象(使用 JSP)。我通常不创建模型对象,我只是将项目放入模型 Map 中。
我想要简单的透明Java到Javascript对象转换。在服务器端,我将一个Java Date对象放入映射中,并在客户端上得到一个Javascript Date对象。即在服务器上我编写这样的代码:
public ModelAndView getModelAndView(User user) {
Map<String, Object> modelMap = new HashMap<String, Object>();
modelMap.put("date", new Date());
modelMap.put("intarray", new int[] {1,2,3});
return new ModelAndView("mainpage", modelMap);
}
在我用 JSP 编写的客户端上:
var model = <someMagicTagOrSomething />
在渲染的 HTML 中,我得到:
var model = {
date: Date.parse('2012-01-01 12:12:12', 'Y-m-d H:m:s'), //JS Date object
intarray: [1,2,3]
}
我在 Spring 文档中看到的大部分内容都涉及使用 @NumberFormat(style=Style.PERCENT) 等注释在服务器上指定对象格式,然后使用 form:input 标签在客户端上获取它们。这不是我想要的,因为我想在客户端上格式化日期,而不用担心它们以什么格式传输到客户端。
实现这一目标的最佳方法是什么?是否有开箱即用的解决方案,或者我需要自己编写一些东西?我知道我可以使用像 Gson 这样的库将我的模型转换为 JSON,但这会将 Java 日期作为字符串返回,我想立即获取 Javascript 日期对象,而不必担心格式。
感谢您的任何建议,
皮奥特
您将无法避免将日期序列化为某种格式。Javascript不理解java对象,所以必须有一些序列化步骤(无论是json,xml还是其他什么)。
最好的方法是将日期作为字符串发送ISO
并在其上使用Date.parse(isostring)
。然后你不需要指定格式字符串,所以你必须少键入,至少你使用大多数客户端理解的格式。
<c:set var="myModelObject" value="${myObjectFromServer}"/>
<script>
var myJSvar = "${myModelObject}";
</script>
是的,您必须序列化/反序列化日期...我扩展了属性编辑器:
public class LocalDateEditor extends PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException{
setValue(DateTimeFormat.forPattern("dd MMM yyyy").print(text));
}
然后在yr控制器中注册(您也可以设置一个全局控制器,但我不记得如何设置):
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(LocalDate.class, new LocalDateEditor());
}
为了它的价值,我使用全局日期格式化程序,并在用户界面上使用全局jquery UI datepicker类 - 实际上根本不需要太多编码。一切都开箱即用 - 在初始设置之后。我从不喜欢 iso 标准日期(这可能是因为我是英国人:-( )
- 如何使用json将对象列表从java转换为javascript
- 使用js或extjs访问对象的java列表
- 如何在java脚本中传递对象数组
- 是否可以在javascript中反序列化java对象
- 对象序列化,JAVA,Javascript
- 通过GWT JSNI传递Java对象时出错
- 在JSON.parse Javascript中字符串化Java对象抛出错误
- 将Java对象转换为JSON
- Java Script将对象方法映射到数组中的对象
- 我如何才能拥有一个类型为Java.util.Arraylist的javascript对象
- 在 Java 中访问 JavaScript 对象的字段
- 当我将 Java 对象传递给客户端时,我得到“406 不可接受”
- 使用 JQuery 创建 Java 对象
- 将SortedMap从Java转换为Javascript中可读的排序对象
- 在Javascript函数中获取Java对象属性
- 重建有角度的java脚本数组对象
- JQuery获取Java ArrayList对象
- JavaFX+Javascript:如何将Java对象注入AMD模块
- 如何在 Node JS 中反序列化对象(Java 序列化对象)
- 使用javascript对象/ Java代码将项目添加到本地json文件中