PrimeFaces使用List <object>在另一个List <object>

时间:2016-04-22 16:01:18

标签: java jsf primefaces datagrid xhtml

更新

我发现dataGrid没有循环遍历列表中的列表的问题是XML代码方面的问题。现在,dataGrid正在读取List并循环遍历它,根据名称创建面板。现在问题似乎是访问此列表中的某些属性。

<p:dataGrid value="#{objList.objList2}" var="objList2" columns="1">  
    <p:panel id="obj2" header="#{objList2.name}" toggleable="true" collapsed="false"> 
                <h:panelGrid columns="2" style="width: 100%" columnClasses="scenario-viewer-leftcolumn,scenario-viewer-rightcolumn">
                    <h:outputText value="Output Name:"  />
                    <p:inputText value="#{objList2.objType}" styleClass="textBoxStyle"/>
                    <h:outputText value="Output Bool:"  />
                    <p:selectBooleanCheckbox value="#{objList2.boolVar}"/>
                </h:panelGrid>
        </p:panel>
 </p:dataGrid>
    </p:panel>
</p:dataGrid>

当我尝试访问objList2下的变量时,给出了错误说明类obj2没有可读属性'objType'。我仔细检查了它确实有这个属性/变量并且它被初始化了。

这更令人奇怪的是,如果我在每个面板的标题中使用objList2.boolVar代替objList2.name,它会显示信息。这证明该属性存在并被初始化。为什么不能在inputText中工作?任何帮助将不胜感激。

ORIGINAL:

我正在使用PrimeFaces并尝试为我的UI创建一个xhtml表单。我试图将列表中的数据动态显示为dataGrid结构。我能够成功完成此操作,但我还需要显示第一个列表中的列表中的数据。

例如:

我在变量objList下有一个List,我用它作为我的第一个dataGrid。我能够遍历此列表并为每个对象创建面板,并为每个对象创建一些其他String数据。

 <p:dataGrid value="#{scenarioTree.objList}" var="objList" columns="1">  
        <p:panel id="obj" header="#{objList.name}" toggleable="true" collapsed="true"> 
            <h:panelGrid columns="2" style="width: 100%" columnClasses="scenario-viewer-leftcolumn,scenario-viewer-rightcolumn">
            <h:outputText value="text:"  />
            <p:inputText value="#{objList.variable}" styleClass="textBoxStyle"/>
            <h:outputText value="text2:"  />
            <p:inputText value="#{objList.variable2}" styleClass="textBoxStyle"/>
        </h:panelGrid> 

现在我希望能够创建第二个引用objList2的dataGrid,它位于objList1中。这样做虽然返回在UI中找不到记录,即使那里有一堆记录。

<p:dataGrid value="#{objList.objList2}" var="objList2" columns="1">  
    <p:panel id="obj2" header="#{objList2.name}" toggleable="true" collapsed="false"> 
        </p:panel>
 </p:dataGrid>
    </p:panel>
</p:dataGrid>

这是PrimeFaces的错误还是我无法做到这一点?或者我做错了吗?

1 个答案:

答案 0 :(得分:0)

每当我们谈论在xhtml中迭代列表时我们都有dataTable,dataGrid等,而且panelGrid也是becoz dataTable,而所有其他人都是panelGrid的子项(我们可以说这个becoz panelGrid也会形成表格,其他人也是我的意思从这种方式的孩子)所以在这种情况下尝试迭代panelGrid中的内部列表,因为你使用panelGrid和引用变量是列表所以内部jsf将理解如下:

objList.get(i).getVariable();//For the first row

但是根据你的代码,它是这样理解的:

objList.getVariable();

这根本不存在,所以它提供问题取出面板我没有发现它的使用和使用如下:

<p:panelGrid value="#{objList}" var="obj">
//Access properties inside that
</p:panelGrid>

如果您想要标题中的内容

,则可以使用<f:facet>标记