当前位置: 首页 > 知识库问答 >
问题:

使用primefaces的部分处理时丢失datagrid的最后一个条目

马业
2023-03-14
<h:form id="formServicesTab">
        <h:panelGrid id="pnlSvcTab" columns="1" styleClass="valignTop" width="100%">
            <p:dataGrid id="dgServices" var="service"
                value="#{subMerchantOperations.subMerchantServices}"
                columns="1" width="100%" styleClass="valignTop"
                emptyMessage="#{messagebundle.submerc_grdlabel_no_service}" transient="true"
                rowIndexVar="index" >

                <p:toolbar>
                    <p:toolbarGroup align="left">
                        <p:commandButton id="btnRemoveSvc" onclick="loading.show();"
                            oncomplete="loading.hide();"
                            value="#{messagebundle.submerc_btn_delete_service}"                         
                            actionListener="#{subMerchantOperations.removeService}"                     
                            process="@form" update="@form">

                            <f:setPropertyActionListener target="#{subMerchantOperations.serviceRowIndex}" value="#{index}" />
                        </p:commandButton>                      
                    </p:toolbarGroup>
                </p:toolbar>

                <h:panelGrid columns="3" styleClass="valignTop" width="100%" bgcolor="F0F0F0">
                    <p:panel style="background:#F0F0F0;">
                        <h:panelGrid id="pnlDgSvc" columns="1" width="100%" style="height:100%">
                            <h:outputText value="#{messagebundle.submerc_label_svc_shortName}" />
                            <h:panelGrid columns="2">
                                <p:inputText id="txtSvcName" value="#{service.serviceName}"
                                    required="true" transient="true"
                                    requiredMessage="#{messagebundle.submerc_validation_msg_required}"
                                    converter="UpperCaseConverter" />
                                <p:message for="txtSvcName" display="text" />
                            </h:panelGrid>

                            <h:outputText value="#{messagebundle.submerc_label_svc_website}" />
                            <p:inputText value="#{service.serviceUrl}" transient="true"/>                           
                        </h:panelGrid>
                    </p:panel>

                    <p:panel style="background:#F0F0F0;">
                        <h:panelGrid columns="1" width="100%">
                            ..........
                        </h:panelGrid>
                    </p:panel>

                    <p:panel style="background:#F0F0F0;">
                        <h:panelGrid id="pgSvcFiles" columns="1" width="100%">
                            ...........      
                        </h:panelGrid>
                    </p:panel>
                </h:panelGrid>
            </p:dataGrid>
        </h:panelGrid>
        <p:toolbar style="background:white">
            <p:toolbarGroup align="left">               
                <p:commandButton id="btnAddNewSvc"                  
                    value="#{messagebundle.submerc_btn_addSvc}"                  
                    actionListener="#{subMerchantOperations.addNewService}"
                    process="@form" update="@form" />

                <p:commandButton id="btnSaveSubM"                   
                    value="#{messagebundle.submerc_btn_sendApproval}"                   
                    action="#{subMerchantOperations.saveServices}" 
                    process="@form" update="@form" />
            </p:toolbarGroup>
        </p:toolbar>
    </h:form>

@ManagedBean
@ViewScoped
public class SubMerchantOperations implements Serializable {
    private static final long serialVersionUID = 8556103952857187080L;  

    private List<Service> subMerchantServices = new ArrayList<Service>();
    private int serviceRowIndex;    

    // add new empty service to the service list
    public void addNewService() {
        try {
            Service svc = new Service();
            svc.setStartDate(new Date());
            getSubMerchantServices().add(svc);                      
        }
        catch(Exception ex) {
            if (logger.isEnabledFor(Level.ERROR)) {
                ...
            }           
        }       
    }

    // Remove the specified service using index parameter got from the datagrid
    public void removeService() {
        try {
            getSubMerchantServices().remove(serviceRowIndex);   
        }
        catch(Exception ex) {
            ... 
        }                               
    }

    // DB Operations
    public String saveSubMerchant() {       
        ...
    }

    public List<Service> getSubMerchantServices() {
        return subMerchantServices;
    }

    public void setSubMerchantServices(List<Service> subMerchantServices) {
        this.subMerchantServices = subMerchantServices;
    }
    public int getServiceRowIndex() {
        return serviceRowIndex;
    }

    public void setServiceRowIndex(int serviceRowIndex) {
        this.serviceRowIndex = serviceRowIndex;
    }
}

共有1个答案

颜霖
2023-03-14

我不知道 属性在 上做什么。我已经查看了Primefaces PDF文档的最新发布版本,但这并不是一个有效属性。

如果您发现基于Facelet的组件验证会导致空表单在提交某个按钮时触发验证错误,那么您可以考虑在支持bean中创建一个由submit方法调用的方法,并验证bean上元素的状态。这是Primefaces的一种流行方法,因为与seam不同,我们没有提供表单级验证。

但是,请检查一下您对immediate=true的理解。

或者,您可以考虑使用JSR303注释来注释POJO的属性。

由于您使用的是集合,请确保您的服务POJO重写equalshashcode,以排除您的集合没有发生什么错误并导致您的问题。

 类似资料:
  • 请看下图。 图像 这些图像显示了我当前代码的工作方式。当我删除最后一个面板并按下update按钮时,所有面板不知何故都消失了。当我对其余的面板做同样的操作时,它工作得很好。 如果有人知道如何解决这些问题,那将是一个很大的帮助。提前道谢。 “XHTML” “ManagedBean”包示例;

  • 问题内容: 我在MSSQL2005中有下表 现在我想根据business_key分组,返回具有最高ID的完整条目。所以我的预期结果是: 我敢打赌,有一种方法可以实现这一目标,但目前我还看不到。 问题答案: 替代解决方案,可能会给您带来更好的性能(双向测试并检查执行计划): 该查询假定该ID是唯一值(至少对于任何给定的business_key而言),并将其设置为NOT NULL。

  • 问题内容: 在对象上执行“ foreach”时,我想对上一次循环迭代做一些不同的事情。我正在使用Ruby,但对于C#,Java等也是如此。 所需的输出等效于: 显而易见的解决方法是使用将代码迁移到for循环,但是for每个解决方案都感觉更优雅。在循环中编码特殊情况的最优雅方式是什么?可以用foreach完成吗? 问题答案: 如何先获取对 最后一项* 的 引用 ,然后在foreach循环中将其用于比

  • 问题内容: 我只是想知道如何使用PHP提取URL的最后一部分。 示例URL是: 现在如何使用PHP提取最后一部分? URL中始终有相同数量的变量,并且id始终在末尾。 问题答案: 您可以使用来匹配所需的URL部分。 在这种情况下,由于该模式很简单,因此我们正在寻找一个正斜杠(并且由于正斜杠表示正则表达式模式的开始和结束,因此我们必须对其进行转义),以及一个或多个数字()字符串()的末尾。圆括号用于

  • 每次作业运行时,都在从不断增长的现有表中读取数据。我正在寻找Spring batch中的选项,以便在每次运行调度作业时只查询新记录。 如果我读了50000条记录,下一个时间表应该从50001开始。 我的想法是将ItemReader读取的最后一条记录的id(整个读卡器输出的最后一条,而不是每个块的最后一条)保存在DB中,并在后续的作业计划中使用。我将从主表返回按id排序的数据。 我怎么知道作者最后的

  • 我对使用PrimeFaces 3.4.1和JSF 2.1.6的dataTable有以下问题。第一次加载页面时,数据表中充满了数据库中的数据,但每当在页面上执行操作(编辑链接、数据表排序或过滤)时,数据表就会丢失其数据。DataTable包含来自此类的元素: 在dataTable上执行操作后进行调试时,我们只在envioDatasujeto字段上保留数据,元素上的其他所有数据都会丢失。 这是xhtm