有没有办法以编程方式在 java 代码中注册自定义 taglib 引用?
我正在使用 JSF 1.2_09,丰富的面孔 3.3.3,jsf-facelets 1.1.14。
具体来说:
在这段代码中,jsf 表达式语言用于为我们做一些工作,比如在一个字段中连接 2 个结果或类似的东西..
FacesContext ctx = FacesContext.getCurrentInstance();
Application app = ctx.getApplication();
ExpressionFactory ef = app.getExpressionFactory();
ELContext elContext = ctx.getELContext();
ValueExpression valueExpression = new OverrideValueExpression(singleResult.getClass(), singleResult);
elContext.getVariableMapper().setVariable("row", valueExpression);
for (int i = 0; i < jsfDisplayValue.size(); i++){
Object value = ef.createValueExpression(elContext, jsfDisplayValue.get(i), Object.class).getValue(ctx.getELContext());
//Do something with value...
}
例如,元素 ofjsfDisplayValue
可以是:
“#{row.name} #{row.surname}”、“#{row.age}”、"#{tagfoo:fooFunction(row.age)}"
...
当表达式包含函数(如高亮显示)时会出现问题tagfoo:fooFunction
。
堆栈跟踪:
javax.el.ELException: Function 'tagfoo:fooFunction' not found
at org.apache.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:198)
at org.apache.el.parser.SimpleNode.accept(SimpleNode.java:147)
at org.apache.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:155)
at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:173)
at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:217)
at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:67)
tagfoo
ELContext 无法识别自定义函数,由于ELContext 未知,因此无法解析该函数。如何在 java 类中注册 taglib 引用,以便 ELContext 可以识别自定义函数?
在 JSF 页面上,我会这样做:
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:tagfoo="http://tagfoo.org/tags">
PS
我的自定义函数在 jsf 页面上正常工作。