spring - 服务层中的 I18n

标签 spring service struts2 domain-driven-design

我的项目使用struts2和spring,我有一些服务方法来处理业务逻辑。 例如

public void aMethod(){
    if(!validate()) return;
    process();
}

private boolean validate() {
    return validateA()&&validateB()&&validateB();
}

但是当我在action(Controller)层调用时,发现页面中没有显示任何错误信息。 所以我改变了吹法:

public String validate() {
    if (!validateA()) {
        return "error.msg.A";
    } else if (!validateB())  {
        return "error.msg.B";
    }
    return  null;
}

Action层直接调用validate方法,获取错误信息,处理i18n相关工作。

我的问题是: 服务层中 i18n 的任何最佳实践? 更改后,我的验证方法在服务层很奇怪。显示 i18n 错误消息并保持服务层清晰的任何好方法?

最佳答案

我通常做的是拥有具有keymessage 属性的自定义异常。 key 是该错误的 i18n key ,消息是默认消息。

所以在服务中:

try{
  some code
}
  catch(SomeException e){
  handleAppropriatly;
  throw new MyCustomException("error.foo","Some default message",e);
}

该操作捕获消息并使用键将其适本地添加到正确的位置 (addActionError/addFieldError),让您可以利用您拥有的任何国际化。

关于spring - 服务层中的 I18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936446/

相关文章:

spring - 不使用 spring taglib 的数据绑定(bind)

java - Android Parcelable 对象传递给 Activity 但不传递给服务

android - 如何在特定日期和时间启动闹钟?

安卓销毁服务

javascript - Struts 2 中的 JavaScript 函数未设置 readOnly 属性

java - 禁用拦截器的执行

java - 如何让Spring Data处理多个异构DataSources?

java - Spring Autowiring 自动检测

Spring 数据 JPA : How to update a model elegantly?

javax.servlet.ServletException : java. lang.LinkageError