如何在dataTable中删除以前搜索的行?

时间:2017-09-15 14:34:07

标签: jsf primefaces

在我的JSF应用程序中,我有一个dataTable,它根据所选的按钮显示行See screenshot

每个按钮显示不同的行。问题是,当我单击另一个按钮时,新行显示在dataTable的底部,但旧行仍然存在。如何清空dataTable,以便只显示与单击按钮对应的行?

这是我的视图

<h:panelGrid id="png3" columns="1" style="font-size: 11px; text-height: font-size; text-align: left; font-weight: bold">
<h:panelGrid id="png31" columns="2">
    <p:panel id="pnlCab" header="Cabecera">
        <p:dataTable id="dataCabecera" value="#{cargaHorariaController.listaActivDoc}" var="listaActDoc" 
                     rowKey="#{listaActDoc.pzptcabperjactPK.pzptcabperjactActividad}" selectionMode="single" 
                     selection="#{cargaHorariaController.listaActivSelected}">
            <p:column headerText="Actividad" style="width: 55%">
                <p:outputLabel value="#{listaActDoc.pzptcabperjactPK.pzptcabperjactActividad} - #{cargaHorariaController.descActiv(listaActDoc.pzptcabperjactPK.pzptcabperjactActividad)}"/>
            </p:column>

            <p:column headerText="" style="width: 45%">
                <div align="center">
                    <p:commandButton value="Ver actividad" id="cmdSubacti" process="dataCabecera" 
                                     action="#{cargaHorariaController.consultarSubactividadesDoc()}" 
                                     update=":formPrincipal:pnlDet">
                        <f:setPropertyActionListener value="#{listaActDoc}" target="#{cargaHorariaController.activSelected}"/>
                    </p:commandButton>
                </div>
            </p:column>
        </p:dataTable>
    </p:panel>

    <p:panel id="pnlDet" header="Detalle">
        <p:dataTable id="dataDetalle" value="#{cargaHorariaController.listaSubactividad}" var="listaSubact"
                     rowKey="#{listaSubact.subactividad}" selectionMode="single" 
                     selection="#{cargaHorariaController.listaSubactivSelected}">
            <p:column headerText="Subactividad" style="width: 35%">
                <p:outputLabel value="#{listaSubact.subactividad} - #{cargaHorariaController.descSubacti(listaSubact.subactividad)}"/>
            </p:column>

            <p:column headerText="Horas" style="width: 15%">
                <p:outputLabel value="#{listaSubact.horas}"/>
            </p:column>

            <p:column headerText="" style="width: 50%">
                <div align="center">
                    <p:commandButton value="Actualizar" type="button" id="actiActu" onclick="PF('wdlgSubactiAct').show()" />
                    <p:spacer width="70px" height="0px"> </p:spacer>
                    <p:commandButton value="Eliminar" id="subactiEli" process="dataDetalle" 
                                     onclick="PF('wdlgEliSub').show()">
                        <f:setPropertyActionListener value="#{listaSubact}" 
                                                     target="#{cargaHorariaController.subactivSelected}" />
                    </p:commandButton>
                </div>
            </p:column>
        </p:dataTable>
    </p:panel>
</h:panelGrid>

这是我的 bean

@ManagedBean
@SessionScoped

public class CargaHorariaController  extends ControllerBase implements Serializable 
{
    @EJB
    private PzptcabperjactFacade pf;
    @EJB
    private PerjactFacade perjactFacade;

    public void consultarSubactividadesDoc()
    {
        listaSubactiDoc = pf.findSubactiDoc(activSelected.getPzptcabperjactPK().getPzptcabperjactActividad(), pidmSelected, periodoSelected);
        for(Iterator i = listaSubactiDoc.iterator(); i.hasNext();)
        {
            subactividadDto crn = new subactividadDto();
            Object[] values = (Object[]) i.next();

            crn.setActividad(values[0].toString());
            crn.setSubactividad(values[1].toString());
            crn.setCodperiodo(values[2].toString());
            crn.setPidm(values[3].toString());
            crn.setFechaActividad(values[4].toString());                
            crn.setFechaInicio(values[5].toString());
            crn.setFechaFin(values[6].toString());
            crn.setHoras(values[7].toString());

            lstCrn.add(crn);       
        }
        listaSubactividad = lstCrn;
    }
}

我已经尝试在 consultarSubactividadesDoc()方法的开头将 listaSubactividad 列表设置为null,但我得到了相同的结果。我没有运气就将@SessionScoped注释更改为@ViewScoped。我还使用了listaSubactividad.clear()在进程中获取NullPointerException。我该怎么办?

0 个答案:

没有答案