我有一个像这样的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
循环,如下所示,以避免出现此类错误。另外,请确保也像本例中一样检查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);
}
}
}
关于java - 无法在Glassfish服务器的控制台上打印Date和String对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139835/