5分間チュートリアルでちょっとはまった

http://cubby.seasar.org/20x/fiveminute.html

validation が動かない、でした。
仕様が変わったのかな。

あっさりと解決。
プロパティというか、フレームワークが触るオブジェクトの validation が final なのが駄目でした。
final 怖い。

@Path("login")
public class LoginAction extends Action {
	public Map<String, Object> sessionScope;
	@RequestParameter
	public String userId;
	@RequestParameter
	public String password;
	
	public /*final*/ ValidationRules validation = new DefaultValidationRules("login.") {
		@Override
		public void initialize() {
			add("userId", new RequiredValidator());
			add("password", new RequiredValidator());
		}
	};

	public ActionResult index() throws Exception {
		return new Forward("/todo/login.jsp");
	}
	
	@Validation(rules="validation", errorPage="/todo/login.jsp")
	public ActionResult process() throws Exception {
		User user = login(userId, password);
		if (user != null) {
			sessionScope.put("user", user);
			return new Redirect("/");
		} else {
			errors.add("ユーザIDかパスワードが違う");
			return new Forward("/todo/login.jsp");
		}
	}
...

009/06/14 23:27:10 org.apache.catalina.core.StandardWrapperValve invoke
致命的: サーブレット default のServlet.service()が例外を投げました
java.lang.IllegalStateException: アクション local.cubby.example.todo.action.LoginAction$$EnhancedByS2AOP$$d1711b@22cae2 には @Validation で指定された validation に対する属性がありません
	at org.seasar.cubby.validator.ValidationUtils.getValidationRules(ValidationUtils.java:63)
	at org.seasar.cubby.plugins.ValidationPlugin.invokeAction(ValidationPlugin.java:72)
	at org.seasar.cubby.internal.controller.impl.ActionProcessorImpl$ActionInvocationImpl.proceed(ActionProcessorImpl.java:154)
	at org.seasar.cubby.internal.controller.impl.ActionProcessorImpl$ActionInvocationImpl.proceed(ActionProcessorImpl.java:112)
	at org.seasar.cubby.internal.controller.impl.ActionProcessorImpl.process(ActionProcessorImpl.java:97)