2012-08-17 171 views
1

我有一個JSF頁面,我需要允許用戶動態創建表單並提交從同一頁面以此表單輸入的數據。刷新JSF頁面

我採取了兩種設計方法來實現它,但沒有一個能夠完全工作。

方法1:我在JSF頁面上放置一個p:panel組件作爲動態表單的容器並將其綁定到我的支持bean。另外,我將命令按鈕放在頁面上以及這些按鈕的操作處理程序中添加表單元素,我放置了將特定UIComponent添加到面板UI組件的邏輯。這些動作處理程序的結果是,我使用faces-redirect = true設置了相同的頁面。 結果:動態顯示正確,但此動態表單的提交按鈕始終僅在第二次點擊時才起作用。

方法2:我在JSF頁面上放置了一個p:panel組件作爲動態表單的容器。在這個面板中,我使用ui:include包含了一個生成的JSF頁面。與以前的方法類似,在命令按鈕的動作處理程序中添加表單元素,我生成要包含的JSF頁面。這些動作處理程序的結果是,我使用faces-redirect = true設置了相同的頁面。 結果:在完成操作處理程序執行和呈現頁面後,生成的JSF頁面不會立即顯示。在2或3次手動頁面刷新後,將顯示生成的JSF頁面。

我想,我沒有采用正確的設計來達到我的要求。你能否建議我在這兩種方法或其他方法中出了什麼問題?

我正在使用PrimeFaces和Tomcat 7.0.27。

此致敬禮, Anand。

回答

1

我一直在使用GlassFish上的PrimeFaces 3.3開發JSF 2.2中的單頁管理應用程序。您應該能夠使用託管bean和ajax處理所有動態表單需求。確保你的提交表單bean是ViewScoped。我的大部分JSF問題都與範圍有關。每個表單標籤應該有一個目的。這是我用於FORM頁面的結構。

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui"  
    xmlns:f="http://java.sun.com/jsf/core"> 
<h:head> 
</h:head> 
<h:body> 
    <h2> 
     FORM ONE 
    </h2>   
    <h:form> 
     <p:panel> or <p:panelGrid> 
    </h:form> 
    <h2> 
     FORM TWO 
    </h2>   
    <h:form> 
     <p:panel> or <p:panelGrid> 
    </h:form> 
</h:body> 

BalusC是JSF的國王,這裏是他關於這個問題的相關條目。

http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ManagedBeanScopes

http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html

您是否使用JSF 1.2或2.x的?

http://balusc.blogspot.com/2006/06/communication-in-jsf.html