2012-08-17 200 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