weapon项目实现增加新记录功能

weapon项目,已经实现了列表和删除功能。继续临摹google mvp项目。实现增加新记录的功能。

目前实现功能截图,列表功能:

image 

增加新记录:

image

保存后的效果:

image

在实现过程中发现原来写的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可以自动将同名参数注入到方法的参数中。

源代码如下:

http://easymorse.googlecode.com/svn/tags/Weapons-0.3/

PDF    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply