h:未填充数据表

时间:2011-10-11 14:11:42

标签: jsf seam

这是一个相关(和或后续)问题:

Event Function called before Setter

所以鉴于我有:

<Td>
<h:selectOneMenu id="combocarList" 
value="#{customerBean.selectedcar}"
styleClass="comboStyle"
valueChangeListener="#{customerBean.loadothercombos}"
onchange="document.forms[0].submit()"
>
<f:selectItem
    itemLabel="-----------Select--------------"
    itemValue="None" />
<f:selectItems value="#{customerBean.carsList}" />
</h:selectOneMenu>
</Td>

当用户从下拉列表中选择一个项目并且backbean执行处理以检索其他下拉列表的值时,会调用该事件,但是我还有一个h:datatable是问题所在。这些值不会显示。

数据表定义为:

<h:dataTable
    id="calDetails" rowClasses="oddrow,evenrow"
    headerClass="thHeading" var="car"
    value="#{cardetails.allinfo}">
    <h:column>
        <f:facet name="header">
            <h:outputText id="lblCode" value="Code"></h:outputText>
        </f:facet>
        <h:inputHidden value="#{car.code}"></h:inputHidden>
        <h:outputText id="carcodeid"
            value="#{car.code}"></h:outputText>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText id="lblCode" value="Sold"></h:outputText>
        </f:facet>
        <h:inputHidden value="#{car.sales}"></h:inputHidden>
        <h:outputText id="carsalesid"
            value="#{car.sales}"></h:outputText>
    </h:column>
</h:dataTable>

我有cardetails.allinfo的setter和getter,我知道调用document.forms[0].submit()cardetails.allinfo不为空,因为我使用

进行了测试
 <h:outputText value="#{cardetails.allinfo eq null}" />

返回false。我一直在为它主演几个小时,看不出我的错。我会很感激任何投入。感谢

1 个答案:

答案 0 :(得分:2)

显然这个清单是空的。更好的调试是

<h:outputText value="#{not empty cardetails.allinfo}" />

只要true不是allinfo 不为空,就会显示null。你也可以这样做

<h:outputText value="#{cardetails.allinfo}" />

以纯文本形式查看ArrayList#toString()所代表的所有列表项。如果你看到[]那么它确实是空的。否则,如果您看到[com.example.Car@1234,com.example.Car@5678],则它有2个Car项(假设您没有覆盖其toString()方法以返回更多人类可读的字符串表示,就像许多初学者一样;))

如果是空列表,则需要从数据库调试并修复列表加载逻辑。