我有一个 Java Web 应用程序。基本上是这样的:
editUser.jsp -> ControllerServlet.java -> UpdateUserCommand.java -> UserService.java -> UserDAO.java -> USER_TABLE.db
用户单击 editUser.jsp 页面上的“保存更改”按钮,成功后,视图将重定向到 viewUser.jsp 页面,在该页面中,用户会看到用户的只读视图和“用户更改已成功保存”消息被展示。
例如,UpdateUserCommand.java 会:
user.setWhatevers( /* whatevers */ );
try {
user = this.userService.updateUser(user);
messages.recordSuccessMessageForView("User changes successfully saved.");
} catch (Exception x) {
messages.recordErrorMessageForView("There was an error; "+x.getMessage());
}
/* redirect to viewUser.jsp page */
我的问题是,在 UserService.java 中我调用了其他东西——比如说发送电子邮件的 NotificationService.java。如果发送电子邮件失败,我会记录电子邮件发送错误,但我会正常进行。
结果是,用户看到“成功保存!” 消息,但没有明显的迹象表明电子邮件未发送。(即使发送电子邮件错误记录在服务器上。)
例如,UserService.java 会:
public User updateUser(User user) throws Exception {
try {
this.userDAO.updateUser(user);
try {
this.notificationService.sendEmail("bob@bob.com", "user saved");
} catch (Exception x) {
logger.log("Error sending email; "+x.getMessage();
}
} catch (Exception x) {
throw new Exception("Error saving!", x);
}
}
所以我的问题是,您如何建议我从 UserService 向 UpdateUserCommand 传达在 UI 中显示与电子邮件相关的警告消息?
UpdateUserCommand.java 可以轻松做到:
messages.recordWarning("Could not send the email.");
但 UserService.java 无权访问“消息”对象。而且我不希望 UserService 抛出异常,因为我希望一切都像一切正常一样继续进行。
任何建议都非常感谢!
抢