How to show a single record of what a list in java returns?

0

I have the following code, which sends to call a query that returns a list to me and in console it sends me the suiente

incidenciaAnioMesDet = anioMesDetService.findIncidenciaAnioMesDeByAnioMes(cvePersona, annio, 1);

    for (IncidenciaAnioMesDet incidencia : incidenciaAnioMesDet) {

        if (incidencia.getDia() != null && incidencia.getIncidencias() != null && incidencia.getIncidencias().getCveIdIncidencia() != null) {
            System.out.println("PRUEBA\n" + " DIA-" + incidencia.getDia() + " INCIDENCIA-" + incidencia.getIncidencias().getCveIdIncidencia());


        }

    }

PRUEBA
 DIA-4 INCIDENCIA-1

PRUEBA
 DIA-7 INCIDENCIA-11

PRUEBA
 DIA-1 INCIDENCIA-33

PRUEBA
 DIA-2 INCIDENCIA-99

PRUEBA
 DIA-6 INCIDENCIA-10

PRUEBA
 DIA-5 INCIDENCIA-1

What I do is pass that info to a table, as follows

<p:dataTable id="consultaIncidencia" styleClass="columns consultaIncidencia" var="incidenciaDet" style="max-width:3000px;max-height:770px;" value="#{RegistroAccesoComponent.incidenciaAnioMesDet}" selection="#{RegistroAccesoComponent.incidenciaAnio}">
  <p:columnGroup type="header">
    <p:row>
      <p:column headerText="RFC" styleClass="columns" style="width:110px;height:50px" />
      <p:column headerText="Nombre" styleClass="columns" style="width:110px;height:50px" />
      <p:column headerText="Clave" styleClass="columns" style="width:110px;height:50px" />
      <ui:repeat value="#{RegistroAccesoComponent.listDias}" var="dia">
        <p:column headerText="#{dia}" />
      </ui:repeat>

    </p:row>
  </p:columnGroup>
  <p:column styleClass="columns">
    <h:outputText value="#{incidenciaDet.incidenciaAnioMes.persona.rfc}" />
  </p:column>
  <p:column styleClass="columns">
    <h:outputText value="#{incidenciaDet.incidenciaAnioMes.persona.nombre} #{incidenciaDet.incidenciaAnioMes.persona.primerApellido} #{incidenciaDet.incidenciaAnioMes.persona.segundoApellido}" />
  </p:column>
  <p:column styleClass="columns">
    <h:outputText value="#{incidenciaDet.incidenciaAnioMes.persona.puesto}" />
  </p:column>
  <p:columns value="#{RegistroAccesoComponent.listDias}" var="dia" styleClass="columns">
    <h:outputText value="#{RegistroAccesoComponent.llenaTabla(incidenciaDet.incidenciaAnioMes.persona.cveIdPersona, incidenciaDet.incidenciaAnioMes.anio, incidenciaDet.incidenciaAnioMes.mes, dia)}" />
  </p:columns>
</p:dataTable>

and he paints me the data like this, example with what he paints in console, on day 1 is the incidence 33

the detail is that I repeat n times the same info, what I want to do is have a single line, xq what else is repeated, how can I do it so that only one row appears on my table?

    
asked by Root93 22.02.2018 в 22:49
source

1 answer

0

The iteration has to be per person to paint the rows:

#{incidenciaDet.incidenciaAnioMes.persona}

instead of

#{RegistroAccesoComponent.incidenciaAnioMesDet}

as you iterate the days that is why the row is repeated n times, I see that you access a person through the incident object, do all the incidents sought by cvePersona always contain the same person? if so, your relationship between incidence-person is not correct since the same person is repeated for each incident, the relationship should be 1 person - > 1 or many incidents .

Regardless of whether you review the topic of your relationships, my solution to your current code would be (assuming you have the Persona object because you get your cvePersona from there):

Persona persona = tuMetodoParaBuscarPersona(x);
cvePersona = persona.cvePersona;
incidenciaAnioMesDet = anioMesDetService.findIncidenciaAnioMesDeByAnioMes(cvePersona, annio, 1);
int[] arrayIncidenciasMes = new int[incidenciaAnioMesDet + 1];

public void armarArregloIncidenciasMes() {
    //El arreglo sera tu mes, cada posicion equivale a cada dia: [0] -> dia 0, [1] -> dia 1
    for (int i=1; i <= arrayIncidenciasMes; i++) {
        arrayIncidenciasMes[i] = 0; //Inicializas con cero numero de incidencias el dia

        //Buscas en tu lista si hay alguna incidencia con ese dia
        for(Incidencia incidencia : incidenciaAnioMesDet) {
            if (i == incidencia.getDay()) { //Dia 1 arrayIncidenciasMes[1]
                arrayIncidenciasMes[i] = incidencia.getCveIdIncidencia(); //[i]=CveIdIncidencia
                break;
            }
        }
    }
}

<p:dataTable id="consultaIncidencia" styleClass="columns consultaIncidencia" style="max-width:3000px;max-height:770px;" selection="#{RegistroAccesoComponent.incidenciaAnio}">
  <p:columnGroup type="header">
    <p:row>
      <p:column headerText="RFC" styleClass="columns" style="width:110px;height:50px" />
      <p:column headerText="Nombre" styleClass="columns" style="width:110px;height:50px" />
      <p:column headerText="Clave" styleClass="columns" style="width:110px;height:50px" />
      <ui:repeat value="#{RegistroAccesoComponent.listDias}" var="dia">
        <p:column headerText="#{dia}" />
      </ui:repeat>

    </p:row>
  </p:columnGroup>

  <p:row>
      <p:column styleClass="columns">
        <h:outputText value="#{RegistroAccesoComponent.persona.rfc}" />
      </p:column>
  </p:row>
  <p:row>
      <p:column styleClass="columns">
        <h:outputText value="#{RegistroAccesoComponent.persona.nombre} #{RegistroAccesoComponent.persona.primerApellido} #{RegistroAccesoComponent.persona.segundoApellido}" />
      </p:column>
  </p:row>
  <p:row>
      <p:column styleClass="columns">
        <h:outputText value="#{RegistroAccesoComponent.persona.puesto}" />
      </p:column>
  </p:row>
  <p:row>
      <p:columns value="#{RegistroAccesoComponent.listDias}" var="dia" styleClass="columns">
        <h:outputText value="#{RegistroAccesoComponent.arrayIncidenciasMes[dia]}" />
      </p:columns>
  </p:row>
</p:dataTable>

Note: I put the p: row tags to manually paint a single row for the person since we remove the property from the iteration of the dataTable.
Greetings.

    
answered by 23.02.2018 в 22:21