gpt4 book ai didi

java - 本地化异常(在 Struts2 应用程序内)

转载 作者:行者123 更新时间:2023-11-30 05:15:05 25 4
gpt4 key购买 nike

我正在开发一个支持多种语言的 Struts 2 应用程序。如果其中一个域对象需要抛出异常,它如何才能以一种不特定于语言的错误消息的方式来抛出异常?稍后如何根据当前区域设置显示该异常?

我最初是在寻找一种方法来将错误消息定位在抛出的位置,但意识到这不是最好的方法,因为 (a) 它在业务模型和 Web 框架之间引入了不必要的依赖关系; (b) 语言应由显示异常时的当前区域设置决定,而不是抛出异常时的语言。

所以我想知道其他人是如何解决这个问题的。 (我认为这并不是 Struts 2 特有的,而是与任何多语言应用程序相关)。

最佳答案

注意到 Throwable 有一个名为 getLocalizedMessage() 的方法后,我决定在我的解决方案中使用它。

我的类 BusinessException 扩展了 Exception,它的构造函数采用代表错误的键:

public BusinessException(String key, Object[] arguments) {
this.key = key;
this.arguments = arguments;
this.locale = Locale.getDefault();
}

如您所见,区域设置默认为 JVM 的默认区域设置。但是,在 Web 应用程序中,应使用当前请求的区域设置。因此,BusinessException 提供了一个 setLocale() 方法,该方法应在 getLocalizedMessage() 之前调用。因此,在 Struts2 操作中,习惯用法类似于:

try {
// call business objects
}
catch(BusinessException be) {
be.setLocale(ActionContext.getContext().getLocale());
addActionError(be.getLocalizedMessage());
return ERROR;
}

郑重声明,本地化消息来自异常类的资源包系列:BusinessException.properties 等。Struts2 应用程序也有一个应用程序范围的资源包,但我决定不使用它以避免依赖性由 Web 框架上的业务对象实现。

关于java - 本地化异常(在 Struts2 应用程序内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1727805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com