[scala]基于resourcebundle的messagesource

之前写了一篇模拟spring的messagesource实现,后来了解到spring使用的是resourcebundle,于是稍微了解resourcebundle之后改进了实现,可能比以前简化很多。

[scala]spring messagesource的功能模仿实现

原理

  • 遍历目录下messages*.properties文件
  • 从文件名中取出locale,比如messages_en_US.properties中en和US分别为语言名和国家名
  • 解析properties文件的k=v键值对,有等号,k和v不为空的情况下构造一个Map,k其实为messageCode, v为messageFormat
  • 最后是根据locale和messageCode查询messageFormat

由于scala有强大的option,flatMap等方法,spring的messageSource的defaultMessage作为调用者的可选项,即Option.getOrElse,参照代码最下方的示例

测试结果

Read More

[scala]50行实现web表单验证器

思路是这样,每个表单实现Validatable特质。这个特质要求实现返回一个属性名到验证器列表的映射。

表单验证器执行时首先获取表单所有的属性(除去class),然后遍历这个映射,运行字段对应的验证器变成响应的验证错误(如果有的话),否则最后是个空集合。

FormValidatorRunner(代码最下方)是测试类,执行结果是

Map(name -> List(ValidateError(default.notBlank,List())))

代码如下:

Read More

GetBeanProperties via Scala

一个简单的用Scala写的获取bean属性的例子。核心方法是Introspector#getBean(Class)