编程出错小心挨枪子-Scooter1.1让子弹飞!

放心。 没人会因编程出错中枪。但你还是会听到枪声。只是为了好玩吧。

编程不光要有效率,还要有乐趣。在这一版中,我们继续沿着这一方向前进。以下是本版新引近的主要功能。浏览本版的全部新功能,请按这里

编译错误音像提醒

Scooter会在你编程出错时提醒你。我们不妨试一下。

1. 打入以下命令,启动Scooter自带的Hello World例子:

>java -jar tools/server.jar examples/greeting

2. 打开Java文件: greeting/WEB-INF/src/greeting/controllers/HelloController.java

3. 有意通过删除一个分号‘;’来制造编程错误

4. 保存文件。这时你应该听到一声枪响。

5. 浏览 http://localhost:8080/greeting。你会看到如下页面:

Compilation alert

6. 点击文件链接。你可以在线编辑此文件。(用户名/密码:admin/welcome)

猜猜编译成功时,会听到什么声音?自己动手试一下吧。

Active Record的查询接口

Scooter现在支持类似Rails3.0的查询接口

以下是新的查询接口实例。点击这里获取更多例子。

//提取名叫Leo的宠物
ActiveRecord Leo = Pet.where("name='Leo'").getRecord();

//提取id是6和10的宠物,结果按出生日期倒排序
List pets = Pet.where("owner_id IN (6, 10)").orderBy("birth_date DESC").getRecords();

//提取3条记录,省去前5条记录,结果按name排序
List pets = Pet.limit(3).offset(5).orderBy("name").getRecords();

//提取姓名是以E开头的人以及他们的宠物的记录
List owners = Owner.where("last_name='E%'").includes("pets").getRecords();

上面最后一个例子用到了includes()方法和两个表pets以及owners. 只有一个SQL被执行。这就是Scooter如何做到eager loading的。

Active Record 支持非缺省数据库联结

通过overriding getConnectionName() 方法,你可以指定ActiveRecord到专门的数据库。

//Post记录从blog_development(缺省)数据库提取出来
public class Post extends ActiveRecord {
}

//Post记录从blog_mysql数据库提取出来
public class Post extends ActiveRecord {
    public String getConnectionName() {
        return "blog_mysql";
    }
}

ActiveRecord post = Post.newRecord();
post.setData("content", "Java programming is fun.");
post.create();//create a new record in the posts table in blog_mysql.

ActiveRecord post10 = Post.findById(10);//retrieve post record with id #10.

你甚至可以join指向不同的数据库的ActiveRecord model。 点击这里获取更多说明。

更好的HTTP请求支持

现在你有更多的方法在controller类中来处理HTTP请求。

//获取HTML表单中的选择列表(Selection list)或复选框(Checkboxes)信息
String[] selectedEmployees = pArray("employees");

//获取HTML表单中的单选按钮(Radio Buttons)信息
Boolean gender = pBoolean("sex");

//获取HTML表单中文本域(Text Fields)日期
Date birthday = pDate("birthday");

你也可以指定日期的格式,使用pFile()和pFiles()来处理上传文件。点击这里获取更多说明。

Greeting项目的例3中具体演示了如何处理HTML表单中各种不同的类型(http://localhost:8080/greeting/examples)。

HTTP Form Example

支持SQL Server数据库

Scooter现在支持SQL Server数据库。下面让我们来做一个基于SQL Server和AJAX的应用。你事先要从微软网站下载AdventureWorks实例数据库。

1. 生成一个名为adventureworks的应用.

>java -jar tools/create.jar adventureworks sqlserver
Adventure Works

2. 修改adventureworks/WEB-INF/config/database.properties文件中的adventureworks_development条目,加入数据库用户名以及密码。

database.connection.aw=\
	driver=com.microsoft.sqlserver.jdbc.SQLServerDriver,\
	url=jdbc:sqlserver://localhost:1433;databaseName=adventureworks,\
	username=sa,\
	password=welcome,\
	max_pool_size=10,\
	min_pool_size=1

3. 启动web服务器

>java -jar tools/server.jar adventureworks

4. 浏览AdventureWorks数据库

http://localhost:8080/adventureworks/admin/databases/adventureworks_development/tables
Browse Adventure Works tables

5. 下面让我们来做一个基于AJAX的应用来管理product架构(Schema)中的location表。

5.1 首先,在adventureworks/WEB-INF/config/database.properties文件中设use.plural.table.namefalse
缺省值是trueAdventureWorks数据库不用名词复数来命名表。

5.2 生成AJAX应用。

>java -jar tools/generate.jar adventureworks scaffold-ajax production.location

6. 浏览product架构(Schema)中的location表: 我们可以增删查改表中的记录而不用离开页面了。

http://localhost:8080/adventureworks/productionlocations
Ajax Product Locations

更多AJAX用法,参见这里

支持Freemarker模板

除了JSP和StringTemplate模板,Scooter现在支持FreeMarker模板。你甚至可以把它们混合使用。

你可以通过改动返回语句来看不同模板的调用。例如改动greeting/WEB-INF/src/greeting/controllers/WelcomeController.java文件的返回语句。 模板文件在greeting/WEB-INF/views/welcome目录下。

public class WelcomeController {
    public String sayit() {
        flash("notice", "Successfully found the message");
        setViewData("content", "Java programming is fun!");

        //render default view (.jsp)
        return renderView("sayit");

        //render FreeMarker view
        //return renderView("sayit.ftl");

        //render StringTemplate view
        //return renderView("sayit.st");
    }
}

浏览以下URL验示你的改动。每次改动不需要重启web server。

http://localhost:8080/greeting/welcome/sayit

更多关于Scooter表视层,可在这里找到。

从任何数据库生成脚手架(scaffold)程序

使用Scooter现在可以从任何数据库生成脚手架(scaffold)程序了。

下面的例子生成基于Oracle数据库里posts表的脚手架(scaffold)程序:

>java -jar tools/generate.jar blog scaffold post@blog_oracle

你可以通过以下URL来浏览posts记录:

http://localhost:8080/blog/posts

更多关于程序生成,可打入以下命令::

>java -jar tools/generate.jar -help

关于Scooter工具的更多帮助,可在这里找到。