i2i無料WEBパーツ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
teedaでエラーメッセージをtitleに設定するコードを以前の載せましたが、AOPによる実装を試してみました。
Pageクラスでは、get+id+Titleのダイナミックプロパティのメソッドを設定しておけば、SetErrorToTitleInterceptor.javaが、エラーがあった場合にtitle属性にエラーメッセージを設定してくれます。

この実装がベストとはとても思えませんが、まあ、とりあえずはこんな感じで・・・。本当は、アノテーション設定するだけtitle属性に設定できるようにしたいんですけどね。。。まあ、おいおいかしら・・。
どうもDI+AOPってのにこなれてないんだよねぇ。

◆customizer.dicon


◆SetErrorToTitleInterceptor.java
package example1.interceptor;

import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

/**
 * titleを設定するDynamicPropertyに対して、エラーメッセージを設定します。
 * @author jasonkidd
 */
public class SetErrorToTitleInterceptor implements MethodInterceptor {

	public Object invoke(final MethodInvocation invocation) throws Throwable {
		    final Method method = invocation.getMethod();

		    // パターンによりIDを取得
		    Pattern pattern = Pattern.compile("get(.+)Title");
		    Matcher matcher = pattern.matcher(method.getName());  
		    String targetName = "";
		    if(matcher.find()) {
		    	targetName = matcher.group(1);
		    	//先頭の文字だけ小文字にする
			    targetName = targetName.substring(0, 1).toLowerCase() + targetName.substring(1);
		    }
			//エラーメッセージを取得してtitleに設定する。 
			Iterator it = FacesContext.getCurrentInstance().getMessages("layoutChildBody:form:" + targetName); 
			String message = ""; 
			if (it.hasNext()) { 
				message = it.next().getDetail(); 
			}
		    return message;
		  }

}

◆NewuserPage.java
package example1.web.hello;

/**
 * ユーザー登録ページ
 * @author jasonkidd
 */
public class NewuserPage extends AbstractNewuser {

	@ByteLength(maximum = 255)
	@Required
	public String name;
	@Required
	@ByteLength(maximum = 10)
	@Exist
	public String loginId;
	@Required
	@ByteLength(maximum = 10)
	public String password;

	@Required
	@ByteLength(maximum = 10)
	@Equal(targetId="password")
	public String passwordCert;

	/** アップロードファイル **/
	public UploadedFile uploadedFile;

	 private Long fileSize;

	private String wrotePath;
    
	private HttpServletRequest request;

	/**
	 * エラー発生時にSetErrorToTitleInterceptorでエラーメッセージを設定する為のメソッド。 
	 * @return
	 */
	public String getNameTitle(){	return null;	}
	public String getLoginIdTitle(){	return null; 	}
	public String getPasswordTitle(){	return null; 	}
	public String getPasswordCertTitle(){	return null; 	}
//・・・以下略

コメント

このコメントは管理者の承認待ちです

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://kevinjohnson2.blog69.fc2.com/tb.php/54-e32c33c6
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。