1

我有一个带有下拉列表和输入文本的数据表。我有一个向数据表添加新行的按钮。

添加时,我想将前一行的下拉列表和输入文本的提交值显示为输出文本,并仅在新行中显示下拉列表和输入文本。

rendered在下拉列表中使用了属性,输入文本和输出文本。但是,当我添加新行时,下拉列表和输出文本都显示在上一行中。

<h:dataTable id="Table" value="#{bean.orderList}" var="attr" binding="#{bean.orderTable}">
    <h:column>
        <f:facet name="header">
            <h:outputText value="Item"/>
        </f:facet>
        <h:outputText value="#{attr.orderItem.ItemId}" rendered="#{attr.orderItem.ItemId != null}" />
        <h:selectOneMenu value="#{attr.orderItem.ItemId}" rendered="#{attr.orderItem.ItemId == null}">
            <f:selectItems value="#{bean.itemList}" var="attrList" itemValue="#{attrList.itemId}" itemLabel="#{attrList.itemName}" />
        </h:selectOneMenu>
    </h:column>

    <h:column>
        <f:facet name="header">
            <h:outputText value="Price" />
        </f:facet>
        <h:outputText value="#{attr.price}" rendered="#{attr.orderItem.itemId != null}" />
        <h:inputText value="#{attr.price}" rendered="#{attr.orderItem.itemId == null}" />
    </h:column>
</h:dataTable>

<a4j:commandButton value="Add" execute="@form" action="#{bean.addAction}" render=":Table" />
4

1 回答 1

1

仔细看看失败的地方:

<h:outputText    ... rendered="#{attr.orderItem.ItemId != null}">
<h:selectOneMenu ... rendered="#{attr.orderItem.ItemId == null}">

以及它的工作原理:

<h:outputText ... rendered="#{attr.orderItem.itemId != null}">
<h:inputText  ... rendered="#{attr.orderItem.itemId == null}">

一个说ItemId,另一个说itemId。对齐它。属性总是以小写字母开头,除非它们本身以 2 个大写字符开头。

于 2013-11-27T13:10:50.913 回答