【问题标题】:PrimeFaces filling dataTable with List<Object> inside another List<Object>PrimeFaces 在另一个 List<Object> 中使用 List<Object> 填充 dataTable
【发布时间】:2016-08-16 08:38:01
【问题描述】:

更新:

我发现 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 下的变量时,出现错误提示 The class obj2 does not have a readable property 'objType'。我仔细检查了一下,它确实有这个属性/变量并且它被初始化了。

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

原文:

我正在使用 PrimeFaces 并尝试为我的 UI 创建一个 xhtml 表单。我正在尝试将列表中的数据动态显示到 dataGrid 结构中。我能够成功地做到这一点,但我还需要从第一个列表中的列表中显示数据。

例如:

我在变量 objList 下有一个列表,用于我的第一个 dataGrid。我能够遍历这个列表并为每个对象和每个对象的一些其他字符串数据创建面板。

 <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> 

现在我希望能够创建第二个 dataGrid,它引用位于 objList1 中的 objList2。这样做虽然返回 No records found in 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 的错误还是我无法做到这一点?还是我做错了?

【问题讨论】:

    标签: java jsf primefaces datagrid xhtml


    【解决方案1】:

    每当我们谈论 xhtml 中的迭代列表时,我们有 dataTable、dataGrid 等,panelGrid 也是因为 dataTable 和所有其他都是 panelGrid 的子项(我们可以说这个 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>
    

    如果你想在标题中添加一些东西,你可以使用&lt;f:facet&gt;标签

    【讨论】:

    • 没有名为 value 的属性。这就是我使用数据网格的原因。我的 panelGrid 只是出于格式化原因。
    猜你喜欢
    • 2012-07-14
    • 2014-01-20
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多