使用 Google Sitebricks 构建更好的 Web 应用程序
2010-06-14 00:00:00 来源:WEB开发网上面所示的 ShowRestaurants.html 命名匹配控制器。由于 Sitebricks 使用了该约定,您不必通过配置来完成它。HTML 主要是纯 HTML;没有脚本片段(这不是一个 JSP)。Sitebricks 小部件 @Repeat 用来遍历集合。评估小部件使用的是 MVEL 表达式语言。MVEL 是典型的 JSP/JSF 表达式语言的一个超集。代码创建一个餐馆表,其中每个餐馆的名称也是到 /restaurant/${restaurant.name} 的超链接。例如,如果有一个名为 TCBY 的餐馆,相应的链接就是 /restaurant/TCBY。像这样的动态 URLs 是 Sitebricks 的基本组成部分。清单 9 显示了它们如何处理示例中使用的控制器。
清单 9. RestaurantDetails 控制器
@At("/restaurant/:name")
public class RestaurantDetails {
private final RestaurantDao dao;
private final ReviewDao reviewDao;
private final Logger logger;
private Restaurant restaurant;
private String text;
private String author;
private Integer rating;
private Integer restaurantId;
@Inject
public RestaurantDetails(RestaurantDao dao, ReviewDao reviewDao, Logger logger){
this.dao = dao;
this.reviewDao = reviewDao;
this.logger = logger;
}
@Get
public void get(@Named("name") String name){
try {
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException ex) {
logger.log(Level.SEVERE, null, ex);
}
this.restaurant = dao.findByName(name);
reviewDao.getReviewsForRestaurant(restaurant);
}
@Post
public String addReview(@Named("name") String name){
try {
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException ex) {
logger.log(Level.SEVERE, null, ex);
}
restaurant = dao.findByName(name);
reviewDao.create(restaurant, text, author, rating);
return "/reviewrWeb/restaurant/"+restaurant.getName();
}
public boolean getNoReviews() {
return this.restaurant.getReviews().size() == 0;
}
// getters and setters omitted for brevity
}
Tags:使用 Google Sitebricks
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接