Невозможно распечатать значения объектов Date и String на консоль на сервере glassfi sh - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть такой управляемый компонент CDI, который вызывает вызов для печати свойства типа Date объекта Appointment, я сначала вызываю .toString() для объекта Date, и это печатает без проблем:

    private String[] selectedApps;
    private List<String> appStrings;
    private List<Appointment> appointments;    

    @PostConstruct
    public void init() {
        appointments = appointmentBean.getAppointments();
        appStrings = new ArrayList<>();
        appointments.forEach((n) -> {
            appStrings.add("START TIME: " + n.getStartTime().toString());
            System.out.print("APPOINTMENT TIME STRING: " + n.getStartTime().toString());
        });  
    }

    public String deleteApps() {
        if (selectedApps.length > 0) {
            appointmentBean.deleteAppointment(selectedApps);
            return "template.xhtml";
        } else {
            System.out.print("no apps selected");
            return "";
        }
    }

Однако в EJB у меня есть другой метод, deleteAppointment(String[] appStrings), который пытается распечатать те же самые значения, которые были переданы ему из метода deleteApps(), и не может это сделать:

    public void deleteAppointment(String[] appStrings) {
        for (int i = 0; i < appStrings.length; i++) {
            String startStr = (appStrings[i].substring(12)).trim();
            System.out.print(startStr);
        }
    }

Единственное различие в значении, которое я пытаюсь распечатать из компонента CDI в EJB, заключается в том, что я вызвал методы .substring() и .trim() для строки, и если я не использую их методы и просто попробуйте напечатать исходную строку, то печать будет успешной. Не выдается никаких ошибок или исключений и не выводится никакого вида на консоль из метода EJB deleteAppointments. Я также не смог найти решения этой проблемы.

Спасибо, Сэм.

1 Ответ

0 голосов
/ 10 апреля 2020

Не должно быть проблем с содержанием appStrings[], которое вы опубликовали. Проверьте вывод следующего кода для примера:

public class Main {
    public static void main(String[] args) {
        String appStrings0 = "START TIME: Tue Apr 07 17:38:00 BST 2020";
        String startStr = appStrings0.substring(12).trim();
        System.out.println(startStr);
    }
}

Вывод:

Tue Apr 07 17:38:00 BST 2020

Возможно, вы допустили ошибку при использовании индексов. Я предлагаю вам использовать расширенный for l oop, как показано ниже, чтобы избежать такой ошибки. Также убедитесь, что вы также проверили null и длину String, как в этом примере.

public void deleteAppointment(String[] appStrings) {
    final int PREFIXLENGTH = "START TIME: ".length();
    for (String appString : appStrings) {
        if(appString != null && appString.length() > PREFIXLENGTH) {
            String startStr = appString.substring(PREFIXLENGTH).trim();
            System.out.print("String: " + appString + ", Substring: " + startStr);
        }
    }
}
...