ozacc-mail libraryをJDK1.4.2環境で使う
ozacc-mail library1.1.5を使おうと、jarファイルをlib以下に入れたら下記のエラーが発生しました。
エラー内容
2006-02-21 18:59:53,925 [main] ERROR org.apache.struts.action.ActionServlet - Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency. java.lang.UnsupportedClassVersionError: com/ozacc/mail/VelocityMailBuilder (Unsupported major.minor version 49.0)
ソースをダウンロードして、JDK1.4.2でビルドしたjarファイルを利用したらOKでした。早くTigerに移行したいなぁ。
S2StrutsのPOJO Actionにおけるタイムアウト処理 その2
よく考えたらPOJO Actionを利用した時は、ActionMappingを取得しなくても、global-forwardに定義したフォワード名を文字列として返せば良いだけでした。結局こんな感じでOKですね。
loginCheckInterceptor.java
public class LoginCheckInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { HttpServletRequest request = SingletonS2ContainerFactory.getContainer().getRequest(); HttpSession session = request.getSession(false); if (session!=null && session.getAttribute(Globals.SESSION_KEY)!=null) { // ログイン済み return invocation.proceed(); } else { // タイムアウト MessageManager.addGlobalError("errors.login.timeout"); MessageManager.saveErrors(); return "timeout"; } }
S2StrutsのPOJO Actionにおけるvalidation処理の切り替え
Actionクラスを1画面1Actionのルールで作成して、parameter属性でボタン毎のメソッドを振り分けています。呼び出すメソッド毎にvalidation処理を切り替えたいのですが、何か良い方法はあるでしょうか。
POJO Formを引数にvalidateメソッドを実行したら、そのPOJO Formに設定されているvalidationが行えると良いなぁと思っています。
【追記】
Strutsのソースを調査して作成してみました。一応うまく動いているようです。
PojoFormValidatorFacade.javaファイルの作成
import org.apache.struts.action.ActionMessages; public interface PojoFormValidatorFacade { public ActionMessages validate(String validationKey, Object pojoForm); }
PojoFormValidatorFacadeImpl.javaファイルの作成
import org.apache.commons.validator.Validator; import org.apache.commons.validator.ValidatorException; import org.apache.struts.action.ActionMessages; import org.apache.struts.validator.BeanValidatorForm; import org.apache.struts.validator.Resources; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; public class PojoFormValidatorFacadeImpl implements PojoFormValidatorFacade { public ActionMessages validate(String validationKey, Object pojoForm){ BeanValidatorForm validatorForm = new BeanValidatorForm(pojoForm); ActionMessages errors = new ActionMessages(); Validator validator = Resources.initValidator( validationKey, validatorForm, SingletonS2ContainerFactory.getContainer().getServletContext(), SingletonS2ContainerFactory.getContainer().getRequest(), errors, 0); try { validator.validate(); } catch (ValidatorException e) { } return errors; } }
PojoFormValidator.javaファイルの作成
import org.apache.struts.action.ActionMessages; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; public class PojoFormValidator { public static ActionMessages validate(String validationKey, Object pojoForm){ return getPojoFormValidatorFacade().validate(validationKey, pojoForm); } private static PojoFormValidatorFacade getPojoFormValidatorFacade() { return (PojoFormValidatorFacade) SingletonS2ContainerFactory.getContainer().getComponent(PojoFormValidatorFacade.class); } }