Есть ли способ программно, в 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. Как я могу зарегистрировать ссылку taglib в классе java, поэтому ELContext может распознавать пользовательские функции?
На странице JSF, я хотел бы сделать это:
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:tagfoo="http://tagfoo.org/tags">
P.S.
Мои пользовательские функции работают правильно на страницах jsf.
Спасибо за ответ. Я сам понял, что мне нужно переопределить метод resolveFunction. Разве вы не думаете, что лучшее решение будет заключаться в том, что ваш код автоматически находит все теги и использует их для решения этой функции? –