weapon项目实现增加新记录功能
weapon项目,已经实现了列表和删除功能。继续临摹google mvp项目。实现增加新记录的功能。
目前实现功能截图,列表功能:
增加新记录:
保存后的效果:
在实现过程中发现原来写的WeapenDeleteEvent和相关Handler类没有作用。在event包下面的代码应该是事件和对应处理类。只有需要视图切换的时候才需要创建这些。
所有和视图切换有关的代码,都应该集中到AppController中,在presenter包中的部分,都是具体视图内部的事件变化和控制。
这里牵扯到一些技术点,Weapon是javabean,虽然是JavaScriptObject类型的,不能直接实例化,比如new,这是因为其实它是javacript在java中的代理对象。
之前没有问题,因为并不需要实例化Weapon对象,因为是从response中得到文本,借助GWT自动得到Weapon对象。但是现在需要将表单中的数据发送到服务器端。好像不用封装为对象也可以,但是这样其实并不省事儿。表单的参数很多,传递起来不方便,不利于维护。
需要实例化Weapon,不能new,而是要这样:
this.weapon = JavaScriptObject.createObject().cast();
然后,通过POST,提交到服务器端,用的方式和前面删除功能类似:
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST,
"../save.json");
requestBuilder.setHeader("Content-Type",
"application/x-www-form-urlencoded");requestBuilder.setRequestData(new StringBuilder().append("name=")
.append(weapon.getName()).append("&description=").append(
weapon.getDescription()).toString());
然后,需要spring mvc这边能够比较舒服的得到Weapon实例。代码如下:
@RequestMapping(value = "/save.json", method = RequestMethod.POST)
public String save(Weapon weapon) {if (weapon.getId() == null) {
create(weapon);
}return "saved";
}
可以看到spring可以自动将同名参数注入到方法的参数中。
源代码如下:
这篇文章上的评论的 RSS feed TrackBack URI