Нужен эксперт по JXLS, создающий файл Excel, но не извлекающий из обеих таблиц - PullRequest
0 голосов
/ 08 января 2019

В моем приложении Java Spring-boot я создаю лист Excel, используя шаблон JXLS с данными, предоставленными из моей базы данных SQL. Я использую три таблицы из базы данных: клиент, лицензия, страховка. Лицензия и страховка имеют свой собственный внешний ключ, связанный с клиентской таблицей. Для доступа к информации о клиенте я использую

jx:each(items="clients" var="client" lastCell="G2")

для доступа к лицензии, я использую:

jx:each(items="client.licenseList", var="license",lastCell="G2")

и для доступа к страхованию я использую:

jx:each(items="client.insurances", var="insurance",lastCell="G2")

Клиент и лицензия работают нормально, но информация о страховке не получается. Я новичок в JXLS, может кто-нибудь сказать мне, почему он не может получить информацию? Должен ли быть столбец в таблице клиента для страховых данных, чтобы их можно было перенести в таблицу Excel? Это основное различие, которое я вижу для лицензий, но я не уверен, так ли это работает ...

Вот моя модель client.java.

@Entity
@DynamicUpdate
@Table(name="Client")
@EntityListeners(AuditingEntityListener.class)
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ClientId")
    private Long id;
    @CreatedDate
    private LocalDateTime createdDate;
    @LastModifiedDate
    @DateTimeFormat(pattern = "MM/dd/yyyy HH:mm a")
    private LocalDateTime lastModifiedDate;
    private String status;
    private String principleName;
    private String legalName;
    private String email;
    private String phoneNumber;
    private String address;
    private String address2;
    private String pastEmployment;
    private String yearsExperience;
    private String referencesNotes;
    private String licenses;
    private String currentAccessPartner;
    private String assignedCRM;
    private String executive;


    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    @JoinColumn(name = "client")
    private List<Employee> employees= new ArrayList<>();

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    @JoinColumn(name = "client")
    private List<VendorService> vendorServices=new ArrayList<>();

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    @JoinColumn(name = "client")
    private List<MarketAccess> marketAccess=new ArrayList<>();

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    @JoinColumn(name = "client")
    private List<License> licenseList= new ArrayList<>();

    public List<License> getLicenseList() {
        return licenseList;
    }

    public void setLicenseList(List<License> licenseList) {
        this.licenseList = licenseList;
    }

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    @JoinColumn(name = "client")
    private List<Insurance> insurances=new ArrayList<>();

    public List<Insurance> getInsurances() {
        return insurances;
    }

    public void setInsurances(List<Insurance> insurances) {
        this.insurances = insurances;
    }

Код для контроллера:

@RequestMapping(value="/report/expirationReport")
    public void expirationReport(HttpServletResponse response){
        List<Client> clients=clientRepository.findAll();

        try {
            response.addHeader("Content-disposition", "attachment; filename=expirationReport.xlsx");
            response.setContentType("application/vnd.ms-excel");
            InputStream is= new ClassPathResource("static/reports/expirationReport.xlsx").getInputStream();
            Context context= new Context();
            context.putVar("clients", clients);

            JxlsHelper.getInstance().processTemplate(is,response.getOutputStream(),context);
            response.flushBuffer();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
...