有沒有辦法以編程方式在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