Primefaces数据表格的行内编辑无法工作

3
我试图使用Primefaces为数据表格中的一行提供内联编辑的可能性,但似乎无法正常工作。我可以在视觉上编辑值,但当我点击保存图标时,它不会更新更改后的值...以下是代码:
数据表格:
<p:dataTable id="ticketTypePrices" var="priceCategoryTicketType" 
    value="#{EventInstanceController.priceCategoryTicketTypes}"
    editable="true">
            
<p:ajax event="rowEdit" update="@this" listener="#{EventInstanceController.onEditPrices}" />  
<p:ajax event="rowEditCancel" listener="#{EventInstanceController.onCancelPrices}" update="@this" />
    
<p:column headerText="Preiskategorie">
    <h:outputText value="#{priceCategoryTicketType.priceCategory.name}" />
</p:column>
                
    <c:forEach  items="#{EventInstanceController.ticketTypes}" var="item">
        <p:column headerText="#{item.name}">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{priceCategoryTicketType.ticketTypes[item]}" />
                </f:facet>
                <f:facet name="input">
                    <p:inputText converter="bigDecimalConverter" value="#{priceCategoryTicketType.ticketTypes[item]}" style="width:50%" />
                </f:facet>
            </p:cellEditor>
        </p:column>
    </c:forEach>
                
    <p:column style="width:3%">
        <p:rowEditor />
    </p:column>
</p:dataTable>

EventInstanceController.onEditPrices

public void onEditPrices(RowEditEvent event) {
        PriceCategoryTicketType pctt = (PriceCategoryTicketType)event.getObject();
        
        System.out.println(pctt.getPriceCategory().getName());
        
        for(int i = 0; i < priceCategoryTicketTypes.size(); i++) {
            PriceCategoryTicketType pctickettype = priceCategoryTicketTypes.get(i);
            if(pctt.getPriceCategory().equals(pctickettype.getPriceCategory())) {
                for(Map.Entry<TicketType, BigDecimal> entry :  pctt.getTicketTypes().entrySet()) {
                    System.out.println("TicketType: " + entry.getKey().getName());
                    System.out.println("Price: " + entry.getValue());
                }
                priceCategoryTicketTypes.set(i, pctt);
            }
        }
    }

它看起来像这样: 数据表概述

正如您所看到的,每个单元格的默认值为0。 如果我更改值(就像图片上那样)为30 25 20并点击保存行图标,这些值将变回0 0 0。

onEditPrices中的System.out.println结果如下:

INFO: TicketType: Standard
INFO: Price: 0
INFO: TicketType: AHV
INFO: Price: 0
INFO: TicketType: Student
INFO: Price: 0

我错过了什么?:(
信息:我正在使用primefaces版本4.0(快照),但也尝试并失败了稳定版本3.5
提前致谢, Xera

我曾经遇到过类似的问题。这是由于数据表中的值引起的。在处理过程中,列表不能被更改。请发布bean类。 - Pedro Teles
在datatable中,'c:forEach'是做什么的? - Kerem Baydoğan
1个回答

0

请检查您的实体,可能有一些验证未被考虑或者数据库中的验证。我解决问题是在实体的列中添加nullable=true,并允许对应表格中某些字段的值为空。 如果您的数据与某些限制冲突,则无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接