使用JSF的动态网页

时间:2011-04-27 09:09:49

标签: java ajax jsf web-frameworks

我们有一个庞大的(许多不同的视图)Java EE应用程序,其Web层将DHTML内容传输到浏览器以生成当前视图。

我们使用自定义Javascript AJAX框架来管理视图上的标准化组件事件。框架由初始页面模板加载,该模板将托管所有不同的视图。

我们为“非程序员”构建了一个工具,用于根据布局,事件和相关功能定义Web视图。定义视图后,DHTML以编程方式创建并存储在数据库中。

视图的用户请求(AJAX)由一个操作对象处理,该操作对象从数据库中提取DHTML内容并将其发送到浏览器,将在模板或模式窗口内呈现。

由于各种原因,我们计划摆脱Javascript框架并将视图事件管理移至服务器端。

寻找一个可行的Java框架,我们研究了JSF接缝以获得我们需要的所有功能,除了如前所述即时创建视图的功能。

我们是否错过了一些JSF功能或解决方法?

如果没有,您是否了解我们可以适应我们需求的其他类似框架?

1 个答案:

答案 0 :(得分:2)

您当然可以在JSF中动态构建视图。如果不了解有关您正在构建的内容的更多详细信息,我无法禁止使用最佳方法,但这里有几种方法可以即时构建视图:

  • 使用带有src属性的ui:include绑定到托管bean的属性
  • 使用ui:include和JSTL
  • 的混合

这有时会变得棘手,因为当你将JSTL与JSF标签混合在一起时,你需要了解渲染生命周期中每种标签将在何处执行以使其按照你想要的方式执行,但是一旦你了解到它,它就是最多的直截了当的方法。

  • 将组件绑定到托管bean上的字段并操纵服务器端

我采用这种方法在应用程序中动态生成表单。表格将根据报告类型,用户类型和大量其他标准而变化。我只是将面板网格JSF组件绑定到服务器端的字段,然后开始“手动”创建子元素(例如:UISelectOne dropdown = new UISelectOne();),将它们作为子项添加到面板网格中( ex:panelgrid.getChildren()。add(dropdown);)当我一起去。

它不一定是panelgrid,当然,它可以是PrimeFaces Layout控件,您可以在其中动态生成layoutUnit子元素。关键是,任何控件都可以绑定到托管bean中的变量,您可以根据您想要的任何条件在服务器端操作它。