我有一个像这样的CDI托管bean,它会调用以打印约会对象的Date类型属性,我首先在Date对象上调用了.toString()
,并且打印没有问题:
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 bean打印到EJB的值的唯一区别是,我已经在字符串上调用了.substring()
和.trim()
方法,如果我不使用这些方法,并且只是尝试打印原始字符串,然后打印成功。不会抛出任何错误或异常,并且EJB方法deleteAppointments
不会向控制台提供任何形式的输出。我也无法找到解决此问题的任何方法。
谢谢,山姆。
发布的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
循环,以避免使用索引时出错。
public void deleteAppointment(String[] appStrings) {
final int PREFIXLENGTH = "START TIME: ".length();
for (String appString : appStrings) {
String startStr = appString.substring(PREFIXLENGTH).trim();
System.out.print(startStr);
}
}