Dorado 5 : 10.6.实现自定义EL表达式 (RF1)

自定义EL表达式包含三部分的开发内容:

EL注册类

Dorado默认提供的EL表达式需要在EL表达式初试化器中注册才可以使用。
初始化器接口的基本代码如下:

public interface ExprInitializer {
void perform(Map varMap, DoradoContext context);
}

其中的perform接口方法是用于注册EL表达式。
实现自定义EL表达式,首先需要实现com.bstek.dorado.common.rtex. ExprInitialize接口,并实现perform方法,注册EL实现类,例如我们看Util的EL表达式的注册:

public class BaseExprInitializer implements ExprInitializer {
public void perform(Map varMap, DoradoContext context) {
varMap.put("Util", SecurityExprHandler.getInstance());
}
}

在该处注册了一个名称为Util的EL对象ExpressionUtils。

EL实现类

上例中注册的EL对象SecurityExprHandler可以是任何类型的Java对象。

public class SecurityExprHandler {
private static final Log logger = LogFactory
.getLog(SecurityExprHandler.class);
private static WebApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(((HttpDoradoContext) DoradoContext
.getContext()).getRequest().getSession()
.getServletContext());

/**

  • 根据给定的el值判断view元素是否有访问权限, true表示有,否则没有
  • @param resString 控件的id
  • @return
    */
    public boolean isIgnored(String resString) {
    try {
    beforeInvocation(resString);
    return false;
    } catch (AccessDeniedException accessDeniedException) {
    logger.error("accessDeniedException>>>>>>>! resString:" + resString
    + " Error Message:" + accessDeniedException.getMessage());
    return true;
    } catch (Exception e) {
    e.printStackTrace();
    return true;
    }
    }
    }

修改home配置文件

最后我们需要在dorado工程的home目录下添加一个名称为rtexpr.xml的xml文件,在该文件中添加自定义的EL表达式的初始化器对象。以便在系统初始化时通过该配置文件注册所有的EL表达式。

<?xml version="1.0" encoding="UTF-8"?>
<initializers>
<initializer clazz="sample.el.BaseExprInitializer" cachable="true" />
</initializers>

其中的cachable属性表示是否进行缓存,优化系统性能。