Routing and Composites
到目前为止,这个教程仅仅是一个单页面应用。这个步骤将改变这一点。 您将把在处理数据中创建的用户界面移动到自己的页面,并为添加新客户创建另一个页面。 然后,您将连接这些页面,以便您的应用能够通过应用这些概念在它们之间导航:
- 路由
- 组合组件
ColumnsLayout组件
完成此步骤将创建3-routing-and-composites的一个版本。
运行应用
在开发您的应用时,您可以使用3-routing-and-composites作为参考。要查看应用的实际运行:
-
导航到包含
pom.xml文件的顶级目录;如果您是按照GitHub上的版本进行的,这就是3-routing-and-composites。 -
使用以下Maven命令在本地运行Spring Boot应用:
mvn
运行应用后,会自动在http://localhost:8080打开一个新浏览器。
可路由的应用
以前,您的应用只有一个功能:显示现有客户数据的表格。 在此步骤中,您的应用还将能够通过添加新客户来修改客户数据。 分离显示和修改的用户界面有利于长期维护和测试,因此您将此功能添加为单独的页面。 您将使您的应用可路由的,以便webforJ可以单独访问和加载这两个用户界面。
可路由的应用是基于URL渲染用户界面的。通过在扩展App类的类上注释@Routify来启用路由,packages元素告诉webforJ哪些包包含用户界面组件。
当您将@Routify注释添加到Application时,请删除run()方法。您将把该方法中的组件移动到您将在com.webforj.tutorial.views包中创建的类中。您更新后的Application.java文件应如下所示:
@SpringBootApplication
@StyleSheet("ws://css/card.css")
@AppTheme("system")
//添加了@Routify注释
@Routify(packages = "com.webforj.tutorial.views")
@AppProfile(name = "CustomerApplication", shortName = "CustomerApplication")
public class Application extends App {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// 删除了重写的App.run()方法
}
在Application中保留@StyleSheet注释会使该CSS全局应用。
创建路由
添加@Routify注释使您的应用可路由。 一旦它可路由,您的应用将在com.webforj.tutorial.views包中查找路由。
您需要为您的用户界面创建路由,并指定它们的路由类型。路由类型决定了如何将用户界面内容映射到URL。
第一个路由类型是View。这种类型的路由直接映射到应用中的特定URL段。表格和新客户表单的用户界面都将是View路由。
第二个路由类型是Layout,它包含在多个页面上显示的用户界面,例如标题或侧边栏。布局路由也会包装子视图,而不会对URL产生影响。
要指定类的路由类型,请将路由类型作为后缀附加到类名的末尾。
例如,MainView是View路由类型。
为了将应用的两个功能分开,您的应用需要将用户界面映射到两个唯一的View路由:一个用于表格,另一个用于客户表单。在/src/main/java/com/webforj/tutorial/views中,创建两个类,并以View为后缀:
MainView:该视图将具有原本在Application类中的Table。FormView:该视图将具有一个添加新客户的表单。
将URL映射到组件
您的应用是可路由的,并知道查找两个View路由,MainView和FormView,但是它没有一个特定的URL来加载它们。通过在视图类上使用@Route注释,您可以告诉webforJ根据给定的URL段在哪里加载它。例如,使用@Route("about")在视图中将类本地映射到http://localhost:8080/about。
顾名思义,MainView是您希望在应用运行时最初加载的类。要实现这一点,请添加一个@Route注释,将MainView映射到应用根URL:
@Route("/")
public class MainView {
public MainView() {
}
}
对于FormView,将视图 映射到当用户访问http://localhost:8080/customer时加载:
@Route("customer")
public class FormView {
public FormView() {
}
}
如果您没有显式为@Route注释分配值,则URL段为类名转换为小写,删除View后缀。
MainView将映射到/mainFormView将映射到/form