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

删除元素时不会更新Primefaces数据表

后阳炎
2023-03-14

我有一个使用rowedit的p:datatable,可以正常工作,但是当您删除一个条目时,datatable没有更新。

@Named(value = "localesMB")
@SessionScoped
public class LocalesMB implements Serializable {
  /**
  * Creates a new instance of Activos
  */
  public LocalesMB() {
  }

  private List<entidades.Locales> localesAll = new ArrayList<>();
  private entidades.Locales selected = new Locales();

  public Locales getSelected() {
      return selected;
  }

  public void setSelected(Locales selected) {
    this.selected = selected;
  }


  public List<Locales> getLocalesAll() {
    return localesAll;
  }

  public void setLocalesAll(List<Locales> localesAll) {
    this.localesAll = localesAll;
  }

  public void deleteSelect(Locales locales) {
    this.selected = locales;
  }

  public void obtenerLocalesAll() {
    try {

        FacesContext ctx1 = FacesContext.getCurrentInstance();
        ValueExpression vex1 = ctx1.getApplication().getExpressionFactory().createValueExpression(ctx1.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB cn = (ControladorMB) vex1.getValue(ctx1.getELContext());
        this.localesAll = cn.getInterfaces().obtenerLocalesAll();

    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: obtenerActivosAll() " + e.getMessage());
    }
  } 

  public void eliminarLocal() {
    try {
        FacesContext ctx1 = FacesContext.getCurrentInstance();
        ValueExpression vex1 = ctx1.getApplication().getExpressionFactory().createValueExpression(ctx1.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB cn = (ControladorMB) vex1.getValue(ctx1.getELContext());
        cn.getInterfaces().eliminarLocal(this.selected);
        this.localesAll = cn.getInterfaces().obtenerLocalesAll();
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: eliminarLocal() " + e.getMessage());
    }
  }  

  public void onRowEdit(RowEditEvent event) {
    try {
        Locales ps = (Locales) event.getObject();
        FacesContext ctx1 = FacesContext.getCurrentInstance();
        ValueExpression vex1 = ctx1.getApplication().getExpressionFactory().createValueExpression(ctx1.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB cn = (ControladorMB) vex1.getValue(ctx1.getELContext());
        cn.getInterfaces().modificarLocal(ps);
        this.localesAll = cn.getInterfaces().obtenerLocalesAll();            
        JsfUtil.addSuccessMessage("Se ha cambiado el valor correctamente.");
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: onRowEdit() " + e.getMessage());
    }
  }
}

xhtml

 <h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="./../resources/css/default.css" rel="stylesheet" type="text/css" />
    <link href="./../resources/css/cssLayout.css" rel="stylesheet" type="text/css" />
    <title>Activos</title>
    <script language="javascript">
        window.onload = function() {
            PF('tb1').clearFilters();
        };
    </script>
</h:head>

<h:body>
 <h:form id="frm1">
        <p:growl id="growl" sticky="true" showDetail="true"/>  
        <p:panel header="Locales e Instalaciones" id="pn1">              
            <p:dataTable  emptyMessage="No se encontraron elementos"  editable="true" rowKey="#{item.idLocales}"
                          id="tabla_listado" var="item"  paginator="true"  widgetVar="tb1"
                          rows="25"  value="#{localesMB.localesAll}"> 

                <f:facet name="header">
                    <h:outputText value="Locales e Instalaciones: #{localesMB.localesAll.size()}"/>
                </f:facet>

                <p:ajax event="rowEdit"  listener="#{localesMB.onRowEdit}"/>  

                <p:column headerText="Descripción">  
                    <p:cellEditor>  
                        <f:facet name="output">  
                            <h:outputText value="#{item.descripcion}" />
                        </f:facet>  
                        <f:facet name="input">  
                            <p:inputText value="#{item.descripcion}" style="width:95%"/>  
                        </f:facet>  
                    </p:cellEditor>  
                </p:column> 
                <p:column headerText="Ubicación">  
                    <p:cellEditor>  
                        <f:facet name="output">  
                            <h:outputText value="#{item.ubicacion}" />
                        </f:facet>  
                        <f:facet name="input">  
                            <p:inputText value="#{item.ubicacion}" style="width:95%"/>  
                        </f:facet>  
                    </p:cellEditor>  
                </p:column>                 

                <p:column style="width:20px">  
                    <p:rowEditor/>  
                </p:column> 
                <p:column style="width:20px">  
                    <p:commandButton id="selectButton256" oncomplete="PF('confirmation').show()" process="@this, tabla_listado"  actionListener="#{localesMB.deleteSelect(item)}" 
                                     icon="ui-icon-trash" title="Eliminar" update=":frm1:confirmDialog">
                    </p:commandButton>  
                </p:column>        
            </p:dataTable>  

        </p:panel>
        <p:confirmDialog appendTo="@(body)" id="confirmDialog" message="Confirma que desea eliminar a: #{localesMB.selected.descripcion}"  
                         header="Mensaje de Confirmación" severity="alert" widgetVar="confirmation" closeOnEscape="true">  
                <p:commandButton id="confirm" value="Sí" update=":frm1"  oncomplete="PF('confirmation').hide()"  
                                 actionListener="#{localesMB.eliminarLocal}" process="@this" styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>  
                <p:commandButton id="decline" value="No" onclick="PF('confirmation').hide()" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>   
        </p:confirmDialog>  
    </h:form>      

共有1个答案

松旻
2023-03-14

这段代码激活了过滤器,但datatable没有filterValue:

   <script language="javascript">
        window.onload = function() {
            PF('tb1').clearFilters();
        };
    </script>

DataTable frm1:tabla_listado已启用筛选,但未定义filteredValue模型引用,以便向后兼容回退到page viewstate方法以保持filteredValue。强烈建议将筛选与filteredValue模型引用一起使用,因为viewstate方法已被弃用,将来将被删除。

解决方案:删除脚本。

 类似资料:
  • 利用UPDATE和DELETE语句进行操作表数据。 更新数据 UPDATE用来更新修改表中的数据 更新表中特定的行 更新表中所有行 注意: 如果省略了WHERE子句,就会更新所有行。 UPDATE语句有三个部分组合 要更新的表 列名和他们的新值 确定要更新哪些行的过滤条件 mysql> UPDATE Customers -> SET cust_email = '[email protect

  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 问题内容: 我有一个问题要Ajax更新ui:repeat。更新是从ui:repeat外部的commandButton触发的(请参见下面的代码)。需要可变的 priceHour 来计算其他价格(周,Monat ..) 当我单击按钮时,什么也没有发生,并且ui:repeat和价格未更新。怎么了? 我也尝试过 更新“ myForm:alvs” , 更新“:myForm:alvs” :什么都没有! 我正在

  • 这是提供用户输入的主活动 } 这是Add_prople类 公共类Add_people扩展AppCompatActivity实现视图。OnClickListener{private EditText name EditText;private EditText ageEditText;private EditText heightEditText;private EditText weightede

  • 我的xhtml中有下一个结构 方法searchAnimals()可以,它返回动物项,但dataTable不刷新,但在java代码(managedBean)中,ArrayList包含这些项。我能做什么?谢谢编辑:我正确地使用了de h:和p:后缀(我想是的),代码是完整代码的一部分,但它是无法正确工作的片段。在第一个面板中,我有一个过滤器控件(按类别、按日期等),命令按钮的功能是调用一个在数据库上执

  • 我有一个带有很多acroforms的pdf,我对它进行了一些操作,结果得到了一个新的pdf。所以我有PDF-1(这是原始版本)和PDF-2(只是PDF-1的副本),现在我想合并它们。两个PDF都有一些缩略形式,例如:字段a、字段2。。。 在合并它们之前,我会将PDF-1展平,因为我只想从PDF-2中获取acrofields。当我检查新合并的PDF时,我可以看到PDF-1页面上没有可见字段,PDF-