使用 Google Sitebricks 构建更好的 Web 应用程序(5)
 
- UID
- 1066743
|

使用 Google Sitebricks 构建更好的 Web 应用程序(5)
表单提交处理表单是 Web 应用程序中最繁琐的工作之一。正如您所期望的,Sitebricks 也是这里的一个亮点。 显示了餐馆明细页面的控制器。视图代码如下面清单 10 所示。
清单 10. 餐馆明细视图1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title></title>
</head>
<body>
<h1>${restaurant.name}</h1>
<h2>Category: ${restaurant.category}</h2>
<h2>Average Rating: ${restaurant.averageRating}</h2>
<h2>Reviews</h2>
@ShowIf(noReviews)
<p>This restaurant has no reviews yet.</p>
@Repeat(items=restaurant.reviews, var="review")
<div class="review">${review.author} {review.rating}<br/>${review.text}</div>
<form method="post">
<label for="author">Your name:</label>
<input type="text" id="author" name="author"/>
<label for="rating">Your rating:</label>
<select name="rating">
<option value="0" label="0"/>
<option value="1" label="1"/>
<option value="2" label="2"/>
<option value="3" label="3"/>
<option value="4" label="4"/>
<option value="5" label="5"/>
</select><br/>
<label for="text">Write your review:</label><br/>
<textarea id="text" name="text" cols="60" rows="40"/><br/>
<input type="hidden" name="restaurantId" value="${restaurant.id}"/>
<input type="submit" value="Submit your review"/>
</form>
</body>
</html>
|
该文件遵循命名约定,因此它的名称为 RestaurantDetails.html。在文件顶部有一个 HTML 代码,用于显示关于餐馆及其所有评论的信息。此处使用了另一个核心 Sitebricks 小部件 @ShowIf。该小部件的参数是一个布尔变量,在该例中称作 noReviews。在 中没有这个变量,但是有一个名为 getNoReviews 的方法。这是依据 JavaBeans 约定,因此在评估 @ShowIf 小部件时会调用该方法。
HTML 模板的一个更有趣的部分是模板底部的表单。该表单使用 post 方法,就像任何更改服务器的表单一样(在本例中是添加评论到数据库)。它提交回表单本身,因此会用到同一个控制器。在 中,您可以看到有一个不同的方法,即 addReview,它由 @Post 进行注释。这是提交表单时会调用的方法。get 中用到同名的值模式。
加入 My developerWorks 中的 Web 开发组在 中与其他开发人员讨论话题、分享资源
还不是 My developerWorks 的成员?
看一下每个表单元素及其名称。这些元素可以与 RestaurantDetails 类的成员变量相匹配。Sitebricks 会自动将表单数据绑定到成员变量,正如对请求参数所做的那样。这大大简化了开发人员的工作。Sitebricks 中的重定向方法 addReview 返回一个字符串。该方法仅返回应该重定向到相对 URL 的字符串。在本例中,URL 是同一个餐馆明细 URL,因此明细页面会重新显示。你可以轻松将其更改为主页 URL 或任何其他想要的 URL。 |
|
|
|
|
|