有没有办法以编程方式在java代码中注册自定义taglib参考?
我正在使用JSF 1.2_09,丰富的面孔3.3.3,jsf-facelets 1.1.14。以编程方式注册taglib参考
具体做法是:
在此代码,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...
}
例如,元素jsfDisplayValue
可以是:
“#{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)
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">
附:
我的自定义函数在jsf页面上正常工作。
感谢您的回复。我想我自己,我需要重写'resolveFunction'方法。难道你不认为更好的解决方案会是你的代码自动找到所有taglib并使用它们来解析函数吗? – 2013-07-23 13:32:24