自定义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属性表示是否进行缓存,优化系统性能。