,而是使用前面介绍的 7 个标准方法来处理用户请求。除此之外,该 Action 总是需要处理 id 请求参数,因此必须提供 id 请求参数,并为之提供对应的 setter 和 getter 方法。
使用Struts 2开发RESTful服务(5)
时间:2009-11-10 ibm 李刚
因为本系统已经提供了 Book Model 类,并且为了更好的模拟 Rails 中 ActiveController(Controller)直接访问 ActiveRecord(Model)的方式,本系统采用了 ModelDriven 的开发方式,下面是本系统中支持REST的 Action 类的代码。
// 定义返回 success 时重定向到 book Action
@Results(@Result(name="success"
, type="redirectAction"
, params = {"actionName" , "book"}))
public class BookController extends ActionSupport
implements ModelDriven<Object>
{
// 封装 id 请求参数的属性
private int id;
private Book model = new Book();
private List<Book> list;
// 定义业务逻辑组件
private BookService bookService = new BookService();
// 获取 id 请求参数的方法
public void setId(int id)
{
this.id = id;
// 取得方法时顺带初始化 model 对象
if (id > 0)
{
this.model = bookService.get(id);
}
}
public int getId()
{
return this.id;
}
// 处理不带 id 参数的 GET 请求
// 进入首页
public HttpHeaders index()
{
list = bookService.getAll();
return new DefaultHttpHeaders("index")
.disableCaching();
}
// 处理不带 id 参数的 GET 请求
// 进入添加新图书。
public String editNew()
{
// 创建一个新图书
model = new Book();
return "editNew";
}
// 处理不带 id 参数的 POST 请求
// 保存新图书
public HttpHeaders create()
{
// 保存图书
bookService.saveOrUpdate(model);
addActionMessage("添加图书成功");
return new DefaultHttpHeaders("success")
.setLocationId(model.getId());
}
// 处理带 id 参数的 GET 请求
// 显示指定图书
public HttpHeaders show()
{
return new DefaultHttpHeaders("show");
}
// 处理带 id 参数、且指定操作 edit 资源的 GET 请求
// 进入编辑页面 (book-edit.jsp)
public String edit()
{
return "edit";
}
// 处理带 id 参数的 PUT 请求
// 修改图书
public String update()
{
bookService.saveOrUpdate(model);
addActionMessage("图书编辑成功!");
return "success";
}
// 处理带 id 参数,且指定操作 deleteConfirm 资源的方法
// 进入删除页面 (book-deleteConfirm.jsp)
public String deleteConfirm()
{
return "deleteConfirm";
}
// 处理带 id 参数的 DELETE 请求
// 删除图书
public String destroy()
{
bookService.remove(id);
addActionMessage("成功删除 ID 为" + id + "的图书!");
return "success";
}
// 实现 ModelDriven 接口必须实现的 getModel 方法
public Object getModel()
{
return (list != null ? list : model);
}
}
使用Struts 2开发RESTful服务(6)
时间:2009-11-10 ibm 李刚
上面 Action 代码中粗体字代码定义了 7 个方法,这 7 个方法正是前面提到的标准方法。除此之外,该 Action 里还包含一个额外的 deleteConfirm() 方法,这个方法用于处理带 id 参数、且指定操作 deleteConfirm 资源的 GE |