2011-04-27 40 views
1

我們有一個巨大的(許多不同的視圖)Java EE應用程序,其Web層將DHTML內容傳輸到瀏覽器以生成當前視圖。使用JSF的動態網頁

我們使用自定義的Javascript AJAX框架來管理視圖上的標準化組件事件。該框架由初始頁面模板加載,該模板將承載所有不同的視圖。

我們爲「非程序員」構建了一個工具,用於根據佈局,事件和相關功能定義Web視圖。一旦定義了視圖,DHTML就以編程方式創建並存儲在數據庫中。

視圖的用戶請求(AJAX)由動作對象處理,該動作對象從數據庫中提取DHTML內容並將其發送到瀏覽器,其中將在模板或模式窗口內呈現。

由於各種原因,我們計劃擺脫Javascript框架並將視圖事件管理移到服務器端。

尋找一個可行的Java框架,我們研究了JSF,該框架包含了我們需要的所有功能,除了前面描述的那樣在動態創建視圖之外。

我們是否錯過了一些JSF功能或解決方法?

如果不是,你是否知道一些其他類似的框架,我們可以適應我們的需求?

回答

2

您當然可以在JSF中動態構建視圖。不知道更多關於你正在構建的細節,我不能禁止一個最佳方法,但這裏有幾種方法來實時構建視圖:

  • 使用ui:include將src屬性綁定到託管Bean的屬性
  • 使用的用戶界面的組合:包括和JSTL

這可能很麻煩,有時因爲當你用JSF標籤混合JSTL,您需要了解在哪裏在渲染生命週期的每一個標籤的種類會執行它來做你想做的事情,但一旦你瞭解到了,這是最直接的方法。

  • 結合上託管bean的一個領域,成分和操作它的服務器側

我把這種方法來動態地生成應用程序中的形式。這些表格會根據報告類型,用戶類型以及其他大量標準而變化。我簡單地將面板網格JSF組件綁定到服務器端的一個字段,然後開始「手動」創建子元素(例如:UISelectOne dropdown = new UISelectOne();),將它們作爲子面板添加到面板網格中(例如:panelgrid.getChildren()。add(dropdown);)隨我走。

它不一定是一個panelgrid,當然,它可能是一個PrimeFaces佈局控件,您可以在其中動態生成layoutUnit子級。關鍵是,任何控件都可以綁定到託管bean中的變量,並且您可以根據所需的任何標準在服務器端對其進行操作。