Forms 使用JSF和Primefaces显示具有存储在ArrayList中的字段的表单

Forms 使用JSF和Primefaces显示具有存储在ArrayList中的字段的表单,forms,jsf,primefaces,selectonemenu,Forms,Jsf,Primefaces,Selectonemenu,几天以来,我一直在努力解决这个问题 我需要显示一个表单。表单的字段是动态生成的,它们存储在ArrayList by Object中,我指的是class属性的一个实例,一个非常简单的类,有两个字符串字段:label和value。换句话说,我没有直接的get和set方法来访问它们 当涉及的字段是平面字段(如文本字段、文本区域等)时,这不是一个问题。当涉及将数据显示为选择框或其他动态字段时,整个过程会变得很痛苦,因为我的字段的值没有更新 我在www上找不到任何关于这一点的信息,我发现的每个示例都使用b

几天以来,我一直在努力解决这个问题

我需要显示一个表单。表单的字段是动态生成的,它们存储在ArrayList by Object中,我指的是class属性的一个实例,一个非常简单的类,有两个字符串字段:label和value。换句话说,我没有直接的get和set方法来访问它们

当涉及的字段是平面字段(如文本字段、文本区域等)时,这不是一个问题。当涉及将数据显示为选择框或其他动态字段时,整个过程会变得很痛苦,因为我的字段的值没有更新

我在www上找不到任何关于这一点的信息,我发现的每个示例都使用backingBean字段作为组件的值,这一切都很有魅力

我已经编写了一段时间了,使用JSF和primefaces,我尝试添加一些JSTL,但我似乎无法克服这个问题。我不认为张贴代码是必要的,在这个时候,我可以提供进一步的信息,虽然,我只是想知道是否有人有同样的问题,或者如果我从一个错误的角度看问题。 对于这种情况,是否有一种被广泛接受的方法

更新代码:

这是我的简化xhtml页面,请注意,backingBean newBacking中的objectcard只是一个属性容器:

<h:form id="COSMO-FORM-NEWCARD">     
    <p:dataTable var="curAttribute"
                 value="#{newBacking.card.attributes}"
                 rowIndexVar="curAttributeIndex">

        <f:facet name="header">New card: #{newBacking.card.classname}</f:facet>

        <p:column width="25%">
             <f:facet name="header">Attribute Name</f:facet>
             <h:outputText value="#{curAttribute.label}" />                    
        </p:column>

       <p:column>
           <f:facet name="header">Attribute Value</f:facet>

               <p:selectOneMenu id="#{curAttributeIndex}" value="#{curAttribute.value}">
                    <f:selectItems value="#{newBacking.lookupActivated()}" var="curItem" itemLabel="#{curItem.label}" itemValue="#{curItem.value}"/>
                </p:selectOneMenu>

       </p:column>
    </p:dataTable> 
    <br />
    <p:commandButton value="Create" action="#{newBacking.commitAction()}"/>
</h:form> 
有人能解释为什么在我尝试呈现表单时不允许使用空id属性吗?我的p:selectOneMenu甚至看不到我的CuraAttribute变量

我甚至不能将dyncamic字段绑定到支持UIComponent,因为我应该创建UIComponents的集合,并且我不能使用colletcion的元素执行绑定


我希望保留JSF的优势,但由于我已经奋斗了很多天,我准备采用不同的方法。

我认为一些代码会有所帮助。具体来说,属性类和页面代码我想您是在循环中显示字段。还有,再解释一下问题是什么不起作用,是否有例外……字段是以何种方式动态生成的?在PrimeFaces中动态生成组件(如selectOneMenu)可能是一件痛苦的事情,这应该在服务器端完成,您可以在服务器端通过代码生成组件!此外,如果生成的组件是HTML标准的,就像普通的select输入一样,这可以在客户端JS上轻松完成,但在这里您将丢失JSF层验证程序、转换器等。。。我不喜欢JSF中的动态方法,也不推荐它。添加了一些代码。这些属性由后端servlet生成,我将作为存储在容器类卡中的ArrayList来访问它们。我无法控制系统的这一部分。您的p:SelectOne菜单能否在简单的数据表中看到CuraAttribute变量,如您的帖子中所示?由于这是一个简化的页面代码,您使用的其他组件可能会出现问题。。。我不知道为什么它是空的!
public class CosmoAttribute {

    private String label;
    private String value;
    // Other fields + getters and setters
}