openxava / 文档 / 第四章:优化用户界面

课程:1. 入门教学 | 2. 基本域模型(上) | 3. 基本域模型(下) | 4. 优化用户界面 | 5. 敏捷开发 | 6. 映射式超类继承 | 7. 实体继承 | 8. 视图继承(View) | 9. Java 属性10. 计算属性 | 11. 用在集合的 @DefaultValueCalculator | 12. @Calculation 和集合总计 | 13. 从外部文件的 @DefaultValueCalculator | 14. 手动更改 schema | 15. 多用户时默认值的计算 | 16. 同步持久属性和计算属性 | 17. 从数据库中的逻辑 | 18. 使用 @EntityValidator 进行验证 | 19. 验证替代方案 | 20. 删除时验证 21. 自定义 Bean Validation 注解 | 22. 在验证中调用 REST 服务 | 23. 注解中的属性 | 24. 改进标准行为 | 25. 行为与业务逻辑 | 26. 参照与集合 | A. Architecture & philosophy | B. Java Persistence API | C. Annotations | D. Automated testing

目录

第四章:优化用户界面
默认用户界面
使用 @View 定义布局
使用 @ReferenceView 细节化 Customer 引用的界面
优化后的用户界面
总结
由 Java 编写出的发票应用程序的默认界面相当好,不过,只需在类中添加一些注解就能自定义用户界面以面对任何业务应用的要求。
在本课中,我们将编写少量代码使我们的应用程序看起来更美观。

默认用户界面

这是发票的默认用户界面:

modeling_en110.png

如您所见,OpenXava 会依您在代码中声明的顺序去显示界面上的成员,一个接着一个由上往下。此外,您可以看到在 Customer 引用那里,会使用 Customer 默认视图。
我们将做一些改进。首先,我们将明确定义成员的布局,通过这种方式,我们可以将 year、number 和 date 放在同一行中。其次,我们将在 Customer 使用更简单的视图。当用户在发票输入客户时,不需要查看所有数据。

使用 @View 定义布局

要在用户界面中定义 Invoice 成员的布局,您必须使用 @View 注解。这很简单,您只需要枚举想显示的成员。代码如下:
@View(members= // 这视图没名称,所以会作为默认视图使用
    "year, number, date;" + // 当用逗号分隔时,代表是在同一行
    "customer;" + // 分号代表是新的一行
    "details;" +
    "remarks"
)
public class Invoice {
最后,我们将显示 Invoice 所有成员,使用逗号分隔 year、number 和 date,这样它们会在同一行显示,且产生更紧凑的用户界面,如下:
modeling_en120.png

使用 @ReferenceView 细节化 Customer 引用的界面

您仍然需要优化 Customer 引用的显示方式,因为它显示了 Customer 所有成员。而在 Invoice 中显示更简化的 Customer 视图应来会更好。为此,您需要在 Customer 中定义一个为 Simple 的视图,然后在 Invoice 指定要显示这个 Customer 的 Simple 视图。
首先,我们在 Customer 中定义 Simple 视图:
@View(name = "Simple", // 只有在指定 Simple 时才会使用此视图
		members = "number, name" // 只有显示 number 和 name 并且在同一行
)
public class Customer {
如本例,当一个视图有名称时,该视图仅会在该名称被指定时才显示。也就是 说,虽然 Customer 只有这个 @View 注解,但是当你尝试显示 Customer 时,它不会使用这个 Simple 视图,而是默认的那个。如果您定义一个没有名称的@View,则该视图将是默认视图,不过这并不是我们想要的。
现在,您必须在 Invoice 中指定 Customer 引用必须使用这个 Simple 视图。这须要通过 @ReferenceView 完成。请以这种方式编辑 Invoice 中的 Customer 引用:
@ManyToOne(fetch=FetchType.LAZY, optional=false)
@ReferenceView("Simple") // 此注解将用名称为 Simple 的视图显示
Customer customer;
非常简单,您只需要在注解上指定你想要显示的视图名称即可。
这之后,Customer 引用会以更紧凑的方式显示:
modeling_en130.png
在下面可以看到我们在 Invoice 所优化的界面。

优化后的用户界面

这是 Invoice 界面优化后的成果:
modeling_en140.png
您已经看到使用 @View 和 @ReferenceView 为 Invoice 获得更紧凑的用户界面是多么的容易。
在没有出很多力的情况下,您已有了一个足够好的用户界面来开始工作了。

总结

在本课中,您学会了如何使用一些 OpenXava 的注解来优化默认的用户界面。如果您想了解更多使用 OpenXava 优化用户界面的方法,请查看参考指南。

下载本课源代码

对这节课有什么问题吗? 前往论譠 一切都顺利吗? 前往第五章