在我的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。我该怎么办?