1

我有一个 JSF 页面,我需要允许用户在该页面上动态创建表单并提交从同一页面输入到此表单中的数据。

我采用了两种设计方法来实现它,但它们都不能完全发挥作用。

方法一:我将 ap:panel 组件放在 JSF 页面上,作为动态表单的容器,并将其绑定到我的 backing bean。此外,我放置了 commandButtons 以在页面上添加表单元素,并且在这些按钮的操作处理程序中,我放置了将特定 UIComponents 添加到面板 UI 组件的逻辑。这些动作处理程序的结果,我设置为与 faces-redirect=true 相同的页面。结果:动态显示正确,但此动态表单的提交按钮始终仅在第二次单击时有效。

方法二:我把 ap:panel 组件放在 JSF 页面上,作为动态表单的容器。在这个面板中,我使用 ui:include 包含了一个生成的 JSF 页面。与之前的方法类似,在添加表单元素的命令按钮的操作处理程序中,我生成要包含的 JSF 页面。这些动作处理程序的结果,我设置为与 faces-redirect=true 相同的页面。结果:在动作处理程序执行和页面渲染完成后,生成的 JSF 页面没有立即显示。刷新 2 或 3 次手册页后,将显示生成的 JSF 页面。

我想,我没有采用正确的设计来满足我的要求。您能否建议我在这两种方法或任何替代方法中出了什么问题。

我正在使用 PrimeFaces 和 Tomcat 7.0.27。

最好的问候,阿南德。

4

1 回答 1

1

我一直在 JSF 2.2 中使用 Glassfish 上的 PrimeFaces 3.3 开发单页管理应用程序。您应该能够使用托管 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

于 2012-10-02T16:05:02.757 回答