路由
在现代 web 应用程序中,路由是指根据当前 URL 或路径管理不同视图或组件之间导航的过程。在 webforJ 中,路由建立了一个复杂的框架,以实现 客户端导航,UI 更新动态发生,无需进行完整的页面重新加载,从而提高了应用的性能。
传统路由与客户端路由
在传统的服务器端路由中,当用户点击链接时,浏览器向服务器发送请求以获取新文档。服务器通过发送一个新的 HTML 页面进行响应,这迫使浏览器重新评估 CSS 和 JavaScript,重新渲染整个文档,并重置应用状态。这个循环引入了延迟和低效率,因为浏览器必须重新加载资源和页面状态。这个过程通常包含:
- 请求:用户导航到一个新 URL,触发了一个请求到服务器。
- 响应:服 务器返回一个新的 HTML 文档以及相关资源(CSS、JS)。
- 渲染:浏览器重新渲染整个页面,通常会失去之前加载页面的状态。
这种方法可能导致性能瓶颈和次优的用户体验,因为需要重复的完整页面重新加载。
客户端路由在 webforJ 中通过直接在浏览器中启用导航解决了这个问题,动态更新 UI 而无需向服务器发送新的请求。以下是其工作原理:
- 单次初始请求:浏览器加载一次应用,包括所有必需的资源(HTML、CSS、JavaScript)。
- URL 管理:路由器监听 URL 更改并根据当前路由更新视图。
- 动态组件渲染:路由器将 URL 映射到一个组件并动态渲染,而无需刷新页面。
- 状态保持:应用状态在导航之间保持,确保视图之间的平滑过渡。
这种设计实现了 深度链接 和 基于 URL 的状态管理,允许用户在应用中书签和分享特定页面,同时享受顺畅的单页面体验。
核心原则
- 基于 URL 的组件映射:在 webforJ 中,路由直接与 UI 组件相关联。一个 URL 模式映射到一个特定组件,决定根据当前路径显示什么内容。
- 声明式路由:路由以声明的方式定义,通常使用注释。每个路由对应一个在匹配路由时渲染的组件。
- 动态导航:路由器动态切换视图而不重新加载页面,使应用保持响应快速。
webforJ 中的客户端路由示例
以下是为 UserProfileView 组件定义路由的示例,以根据 URL 中的 id 参数显示用户详细信息:
@Route(value = "user/:id")
public class UserProfileView extends Composite<Div> implements DidEnterObserver {
@Override
public void onDidEnter(DidEnterEvent event, ParametersBag parameters) {
String id = parameters.getAlpha("id").orElse("");
refreshProfile(id);
}
}
在这个设置中:
- 导航到
/user/john将渲染UserProfileView组件。 id参数将从 URL 捕获john,并允许你在组件中使用它来获取和显示用户数据。
主题
可路由应用
Enable webforJ routing with the @Routify annotation to scan packages, manage frames, and control browser history.
定义路由
定义路由对于将 URL 映射到特定组件是至关重要的。这使您能够根据 URL 结构控制 UI 的不同部分如何渲染。该框架使用 @Route 注释使此过程声明式和简单,从而减少手动配置的需要。
路由导航
Trigger client-side navigation programmatically with Router.navigate, pass parameters, and switch views without reloads.
路由模式
Define dynamic URL segments, optional parameters, wildcards, and regex constraints to match webforJ routes precisely.
查询参数
查询参数允许您通过 URL 传递附加数据,使用格式 ?key1=value1&key2=value2。而路由参数用于在 URL 路径中传递必需的数据,查询参数则提供了一种灵活的机制来传递可选或附加数据。当过滤内容、排序或处理同一键的多个值时,它们特别有用。
状态管理
创建无缝的动态用户体验通常需要将您的 web 应用的状态反映在 URL 中,并在浏览器导航事件之间保留该状态。您可以利 用 URL 参数更新和浏览器历史状态管理而无需重新加载页面来实现这一点。这确保用户可以共享、书签或返回特定视图,同时应用程序完全了解他们之前的交互。
导航生命周期
1 项
路由层级
1 项
导航框架标题
Set browser frame titles per route with the @FrameTitle annotation or generate them dynamically using HasFrameTitle.
路由注册
除了使用 @Route 注释注册路由之外,可以根据应用逻辑、用户角色或其他条件动态注册、更新或删除路由。这种灵活性使您能够更动态地管理导航,而不是在编译时静态定义路由。
路由过渡
路由过渡在路由之间导航时提供声明性的动画过渡。基于 View Transitions API,将 @RouteTransition 注解添加到您的路由组件可以让路由器在导航过程中自动处理动画生命周期。