我正在开发一个项目,该项目的客户端是在JSF上编写的,后端是在Wildfly上运行的Java EE编写的。 团队正在考虑迁移到Angular。 方法是在Angular上编写新页面,然后慢慢替换旧的JSF页面。
如何启用从JSF页面到特定Angular页面的导航?
答案 0 :(得分:1)
我想知道是否在Angular上编写新页面并同时运行它们 在相同的背景下,当前的JSF客户端很有意义,如果可以,那么 你会那样做吗?
只要您的后端服务是由某种托管bean(cdi,jsf等)构成的,那么通过它的所有途径都将经过一些棘手的路径,除了它还会花费比您预期更多的精力。
如果您在后端提供了全面的服务,则“在Angular编写新页面并在当前引擎盖下与当前JSF客户端一起运行它们” 将很有意义,并且所需要的只是一些重定向配置在jsf端为特定页面提供服务,以服务您的角度应用程序或使用哈希定位策略。 实施这种情况并不复杂。 步骤基本上是这样的:
使用与您的上下文路径相同的上下文路径构建角度项目 jsf context-path以及您的角度文件夹的名称,如下所示:
ng build --prod --base-href“ / myjsfapp / angular /” --deploy-url“ / myjsfapp / angular /”
在jsf webapp文件夹中创建一个名为angular的文件夹,并将其角度分布文件放入其中。
完成上述步骤后,您的angular应用程序将在/context-path/angular/index.html路径下提供。
但是,访问角度页面将需要更多注意。由于角度应用程序大约只有一页(index.html),因此所有页面实际上都是在运行时在同一index.html中提供的逻辑页面。因此,当您尝试访问其中一个页面时,可以说用户页面,在您的角度应用程序内部,服务器将启动并搜索物理/users.html页面并返回http404。要处理此问题,您可以设置重定向规则或者选择最简单的方法是哈希定位策略。通过在forRoot调用中添加{useHash:true}配置,可以轻松地在角度应用程序中使用哈希定位策略。 (如果您采用这种策略,这应该是第一步)
@NgModule({
imports: [ RouterModule.forRoot(routes, {useHash: true})],
...
})
使用哈希定位策略,您可以使用哈希网址访问角度页面。 例如,http://localhost:8080/myjsfapp/angular/index.html#users