I18n在服务层

时间:2014-05-29 15:01:23

标签: spring service struts2 domain-driven-design

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

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

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

但是当我调用动作(Controller)图层时,我发现页面中没有显示错误消息。 所以我改变了我的方法:

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

动作层直接调用validate方法并获取错误消息以处理i18n相关工作。

我的问题是: 服务层中i18n的最佳实践是什么? 我的更改后,我的验证方法在服务层非常奇怪。有什么好方法可以显示i18n错误信息并保持服务层清晰?

1 个答案:

答案 0 :(得分:1)

我通常做的是拥有消息属性的自定义例外。 密钥是该错误的i18n密钥,该消息是默认消息。

所以在服务中:

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

该操作捕获消息并使用密钥将其正确地添加到正确的位置(addActionError / addFieldError),从而允许您利用您拥有的任何国际化。