首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

流线化 Web 应用程序开发(5)

流线化 Web 应用程序开发(5)

技巧 1:去掉 XML 配置Web 应用程序的 XML 配置始终是个麻烦问题 — 它非常冗长并且容易出现错误,因此最好将 XML 配置委托给一个框架,比如通过注释、约定或特定于领域的语言。作为开发人员,我们应该能够集中精力实现一些操作,而不是将浪费时间在冗长的 XML 方面。
作为一个典型的例子,清单 6 展示了在使用 JSF 1 的情况下,在 places 应用程序中声明托管 bean 所需的 20 行 XML 代码:
清单 6. JSF 1 的托管 bean 声明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<managed-bean>
  <managed-bean-class>com.clarity.MapService</managed-bean-class>
  <managed-bean-name>mapService</managed-bean-name>
  <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

<managed-bean>
  <managed-bean-class>com.clarity.WeatherService</managed-bean-class>
  <managed-bean-name>weatherService</managed-bean-name>
  <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

<managed-bean>
  <managed-bean-class>com.clarity.Places</managed-bean-class>
  <managed-bean-name>places</managed-bean-name>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<managed-bean>
  <managed-bean-class>com.clarity.Place</managed-bean-class>
  <managed-bean-name>place</managed-bean-name>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>




对于 JSF 2,XML 消失了,您将对类使用注释,如清单 7 所示:
清单 7. JSF 2 的托管 bean 注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@ManagedBean(eager=true)
public class MapService {
  ...
}

@ManagedBean(eager=true)
public class WeatherService {
  ...
}

@ManagedBean()
@SessionScoped
public class Places {
  ...
}

@ManagedBean()
@RequestScoped
public class Place {
  ...
}




按照约定,托管 bean 的名称与类名相同,类名的第一个字母被转换为小写。例如, 中创建的托管,从上到小依次为:mapService、weatherService、places 和 place。也可以使用 ManagedBean 注释的 name 属性显式地指定一个托管 bean,比如:@ManagedBean(name = "place")。
在  中,我对 mapService 和 webService 托管 bean 使用 eager 属性。当 eager 属性为 true 时,JSF 将在启动时创建托管 bean 并将其放入应用程序范围。
也可以使用 @ManagedProperty 注释设置托管 bean 属性。 展示了 JSF 2 托管 bean 注释的完整列表:
表 2. JSF 2 托管 bean 注释(@...Scoped 注释只对 @ManagedBean 有效)托管 bean 注释描述属性@ManagedBean以托管 bean 的形式注册一个类实例,然后将其放入到使用其中一个 @...Scoped 注释指定的范围内。如果没有指定任何范围,JSF 将把此 bean 放入请求范围,如果没有指定任何名称,JSF 将把类名的第一个字母转换为小写,形成一个托管 bean 名称;例如,如果类名为 UserBean,那么 JSF 将创建一个托管 bean,其名为 userBean。eager 和  name 属性都是可选的。
注释必须结合使用一个实现零参数构造器的 Java 类。
eager,name@ManagedProperty为托管 bean 设置一个属性。注释必须放在类成员变量的声明之前。name 属性指定特性的名称,默认情况下为成员变量的名称。value 属性是特性的值,可以是一个字符串,也可以是一个 JSF 表达式,比如 #{...}。
value,name@ApplicationScoped在应用程序范围内存储托管 bean。
@SessionScoped在会话范围内存储托管 bean。
@RequestScoped在请求范围内存储托管 bean。
@ViewScoped在视图范围内存储托管 bean。
@NoneScoped将托管 bean 指定为没有范围。无范围的托管 bean 在被其他 bean 引用时比较有用。
@CustomScoped在定制范围内存储托管 bean。
定制范围就是指可以由页面创建者访问的地图。可以通过编程的方式控制定制范围内的 bean 的可视性和生命周期。value 属性指向一个地图。
value
从 faces-config.xml 中移除托管 bean 声明将极大地减少 XML,但是在 JSF 2 中,通过使用注释(如我对托管 bean 所做的一样)或是约定(比如 JSF 2 的简化的导航处理),几乎可以去掉所有的 XML 内容。
返回列表