JSF2.0与Flex和JavaFX的集成实践

需积分: 10 1 下载量 16 浏览量 更新于2024-09-15 收藏 170KB PDF 举报
"这篇文档详细介绍了如何将Adobe Flex和JavaFX与JavaServer Faces 2.0(JSF2.0)结合使用,以创建富互联网应用程序。作者ReLai探讨了JSF2.0的新特性,如标准化的AJAX支持、Facelets作为默认视图技术以及定制组件的创作,这些都使得集成富客户端变得更加便捷。文中通过一个Flex饼图应用的实例,展示了如何在JSF环境中封装和传递数据,以及如何实现服务器往返功能。最后,文档还涉及了在JavaFX中重新实现图表并嵌入到JSF应用程序中的过程。" 在这篇文章中,首先提到了JSF2.0规范的重要改进,它是基于JSF1.0的经验和成功建立的,借鉴了Seam和其他Web框架的最佳实践,强调了惯例优于配置和批注优于XML的原则。这导致了JSF框架的简化,提高了开发效率。JSF2.0的关键特性包括: 1. 标准化的AJAX支持:允许开发者轻松地创建异步更新页面的部分区域,提供更流畅的用户体验。 2. Facelets作为默认视图技术:Facelets是XML基的模板语言,比JSP更简洁且性能更好,便于维护和组件化。 3. 定制组合组件:JSF2.0增强了组件模型,使得创建和复用自定义UI组件更加直观。 然后,文章转向了Adobe Flex和JavaFX这两个富客户端技术。Flex以其强大的RIA(富互联网应用)框架而闻名,而JavaFX作为较新的平台,因其在Java生态系统内的潜力而受到关注。作者通过一个实际的Flex应用——一个显示冰淇淋口味受欢迎度的饼图,演示了如何在JSF2.0环境中集成Flex组件: - 将Flex饼图组件封装成JSF的组合组件,使得它能在JSF页面上无缝使用。 - 数据不再硬编码,而是通过JSF托管bean动态传递到Flex应用,展示了JSF和Flex之间数据交换的可能性。 - 添加服务器往返功能,允许用户选择喜欢的口味并提交,展示了JSF的回发和更新机制。 最后,作者展示了如何使用JavaFX重新实现相同的饼图,并将其集成到JSF应用中,进一步证明了跨技术的兼容性和互操作性。 示例应用程序的源代码可供下载,便于读者亲自尝试和学习。开发环境为NetBeans 6.9.1,与Flex SDK 4.1和JavaFX SDK 1.3.1进行了绑定,包含了三个项目:SampleChartFlex(Flex图表),SampleChartFX(JavaFX图表),和SampleWeb(Web应用程序)。用户可以在NetBeans中打开并运行这些项目,以体验和理解文中所述的技术整合。 这篇文档为开发者提供了一个实用的指南,指导他们如何利用JSF2.0的最新特性,结合Adobe Flex和JavaFX创建丰富的、交互性强的Web应用。

Exception in Application constructor Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: Unable to construct Application instance: class com.example.demo.Main at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:891) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class com.example.demo.Main (in module com.example.javafxtest) because module com.example.javafxtest does not export com.example.demo to module javafx.graphics at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392) at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:803) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184) ... 1 more

2023-05-24 上传