【问题标题】:Primefaces inline editing of datatable not workingPrimefaces内联编辑数据表不起作用
【发布时间】:2013-06-01 14:22:46
【问题描述】:

我正在尝试提供一种使用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。 如果我将值(如图所示)更改为 f.e. 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 失败

提前致谢, 泽拉

【问题讨论】:

  • 我遇到了类似的问题。这是因为数据表中的值。过程中不得更改列表。请张贴豆类。
  • 'c:forEach' 在数据表中做什么?

标签: jsf primefaces datatable editing inline-editing


【解决方案1】:

查看您的实体,也许某些验证没有考虑或数据库中的验证,我解决了将 nullable=true 放在实体列中并在相应表的某些字段中允许空值的问题。 如果您的数据冲突,某些限制将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多