カスタムタグ:JSPページでSpring Beanを動的に実行する方法
6576 ワード
カスタムタグ:JSPページでSpring Beanを動的に実行する方法
このカスタムラベルを使用すると、JSPページであるSpring Beanオブジェクトを動的に実行することができ、方法によって返された結果はValueStockに格納される.このカスタムラベルはSpring 2、Struts 2、Hibernate 3の環境で試験に合格しました.
一、javaソースコード
1、ServiceTagソースコード
Javaコード
2、ServiceParameTagソースコード
Javaコード
3、共通方法のソースコード
Javaコード
*
* SpringConteextUtilの例に対して、自動的にaplication Conteetを設定して、その後直接にappication Contectを使うことができます.
* package org.co mpany.xxx; import org.springframe ewark.beans.BensException; import org.springframe ext.com.Application Context; import org.springframe ework.com.Application ControtextAware; /** * * スプリング容器を取得して、容器に定義されている他のbeanにアクセスします. * @author ltiger * @シンプル MOSTs View 3.0 2009-11-16 */ pblic クラス SpringConteextUtil implements Application ContactextAware { // Springアプリケーションコンテキスト環境 prvate static Apple Comptext appication Comptext; /** * Application ControtextAwareインターフェースのコールバック方法を実現し、コンテキスト環境を設定します. * * @パラム appication Comptext */ public void setApple Contect(Apple Contect) appication Cotext) { SpringConteextUtil.appicationComptext = appication Comptext; } /** * @return Apple Comptext */ public static Apple Comptext getApple Conteext() { return appication Comptext; } /** * オブジェクトを取得 * ここでbean方法を書き直して、主な役割を果たします. * @パラム name * @return Object 与えられた名前で登録されたbeanの例 * @ローソン BensException */ public static Object get Bean(String) name ローソン BensException { return appication Contect.getBen(name); } } 二、tldファイルソースコード
Xmlコード
三、パラダイム
1、javaソースコード
Javaコード
Htmlコード cjm:serviceBen>
このカスタムラベルを使用すると、JSPページであるSpring Beanオブジェクトを動的に実行することができ、方法によって返された結果はValueStockに格納される.このカスタムラベルはSpring 2、Struts 2、Hibernate 3の環境で試験に合格しました.
一、javaソースコード
1、ServiceTagソースコード
Javaコード
public class ServiceTag extends BaseBodyTagSupport {
private String beanName;
private String methodName;
private String id;
public List params = new ArrayList();
public void setBeanName(String beanName) {
this.beanName = beanName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public void setId(String id) {
this.id = id;
}
public int doEndTag() throws JspException {
Object bean = null;
Method method = null;
// bean
try{
bean = SpringContextUtil.getBean(beanName);
}catch(Exception ex){
throw new JspException("get bean error: " + beanName);
}
//
if(bean != null){
try {
method = bean.getClass().getMethod(methodName, TagUtil.getParameterTypes(params));
}catch(Exception e) {
throw new JspException("get method error: " + beanName + "." + methodName);
}
}else{
throw new JspException("ServiceTag Error: bean [" + beanName + "] is null");
}
// ,
Object result = null;
if(method != null){
try {
result = method.invoke(bean, TagUtil.getParameterValues(params));
}catch(Exception e){
throw new JspException("method invoke error");
}
}
// ValueStack
ValueStack vs = TagUtils.getStack(pageContext);
vs.getContext().put(id, result);
return EVAL_PAGE;
}
}
2、ServiceParameTagソースコード
Javaコード
public class ServiceParamTag extends BaseBodyTagSupport {
private String name;
private Object value;
private String type;
public void setName(String name) {
this.name = name;
}
public void setValue(Object value) {
this.value = value;
}
public void setType(String type) {
this.type = type;
}
public int doEndTag() throws JspException {
Tag parent = getParent();
if(parent instanceof ServiceTag){
Map p = new HashMap();
p.put("paramName", name);
p.put("paramValue", value);
p.put("paramType", type);
((ServiceTag)parent).params.add(p);
}
return EVAL_PAGE;
}
}
3、共通方法のソースコード
Javaコード
//
public static Class[] getParameterTypes(List params) throws Exception{
Class[] c = new Class[params.size()];
for(int i=0;i
* 必ずspring.xmlに加えます. *
* SpringConteextUtilの例に対して、自動的にaplication Conteetを設定して、その後直接にappication Contectを使うことができます.
*
Xmlコード
serviceBean
com.cjm.web.taglib.ServiceTag
JSP
beanName
true
true
methodName
true
true
id
true
true
serviceParam
com.cjm.web.taglib.ServiceParamTag
JSP
name
true
true
value
true
true
type
true
true
三、パラダイム
1、javaソースコード
Javaコード
public class RoleService extends BaseService {
private RoleDao roleDao;
public RoleDao getRoleDao() {
return roleDao;
}
public void setRoleDao(RoleDao roleDao) {
this.roleDao = roleDao;
}
public Role getRole(String roleId){
return (Role)get(Role.class, roleId);
}
}
2、JSPページのソースコードHtmlコード