Итак, у меня есть банка, содержащая несколько общих файлов .xhtml, которые я использую в своем веб-проекте (JSF2.2 на сервере Wildfly 8.1) в качестве пользовательских компонентов.Ссылка Функция EL из xhtml, расположенная в том же банке
Кроме того, в том же .jar У меня есть класс утилиты (ViewUtils), который имеет функцию, которую я вызываю из файлов .xhtml, расположенных в моем веб-проекте.
Дело в том, что я действительно хочу получить доступ к этой функции EL из файлов .xhtml, расположенных в той же банке, где находится функция, и я не могу. JBoss говорит, что выражение EL не распознается. Тем не менее, я могу вызвать эту функцию из файлов .xhtml, расположенных в моем веб-проекте (.war)
Я сам объясню? Вот код.
Это код в моем .jar
public final class ViewUtils {
(...)
public static String getEnumMessageKey(final Enum<?> e) {
String key = "";
try {
key = "enum_" + e.getClass().getSimpleName().toLowerCase() + '_' + e.name().toLowerCase();
} catch (Exception e) {
LOG.debug("Key not found or null.");
}
return key;
}
(...)
}
custom.taglib.xml
<namespace>http://mycompany.com/taglib</namespace>
<composite-library-name>conexiacomponent</composite-library-name>
<function>
<function-name>enum_key</function-name>
<function-class>com.mycompany.one.webcore.util.ViewUtils</function-class>
<function-signature>java.lang.String getEnumMessageKey(java.lang.Enum)</function-signature>
</function>
.xhtml компонент
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:cx="http://mycompany.com/taglib">
(...)
<li>#{i18n[cx:enum_key(cc.attrs.enumParam)]}: #{cc.attrs.afiliado.numeroDocumento}</li>
(...)
</composite:implementation>
</html>
И это .xhtml находится в моем .war
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"
xmlns:cnx="http://mycompany.com/taglib"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="valuePath"/>
<composite:attribute name="view"/>
</composite:interface>
<composite:implementation>
<h:selectOneMenu id="tipoDoc" value="#{cc.attrs.valuePath}" converter="com.mycompany.one.webcore.converter.GeneralConverter" styleClass="form-control input-sm" >
<f:selectItem itemLabel="Seleccione.." itemValue="#{null}" />
<f:selectItems value="#{comboView.documentTypes}" var="_ti" itemLabel="#{i18n[cnx:enum_key(_ti)]}" itemValue="#{_ti}" />
</h:selectOneMenu>
</composite:implementation>
</html>
И, наконец, это ошибка, которую я получаю, когда пытаюсь получить доступ к представлению, включающему один из этих компонентов jar (вызывающий функцию).
Caused by: javax.el.ELException: Function 'cx:enum_key' not found
Пожалуйста, задавайте мне любые вопросы, если что-то недостаточно ясно. Спасибо заранее.
У Mojarra ранее были ошибки в разрешении функций EL в композитах. Какую версию Mojarra 2.2.x вы используете? Он работает, когда вы перемещаете 'xmlns: cx =" ... "' из корневого тега в тег ' '? Испытывали ли вы его вне композита, в обычном Facelet? –
BalusC
Я могу фактически выполнить функцию из композитов в моем .war Проблема заключается в композитах, которые находятся внутри .jar, где функция: S –
-Version is 2.2.2 -hadn't попробовал это, но теперь Я сделал и до сих пор не работает :( -Да, я пробовал вне композита. Я называю это из многих мест внутри .war (не все из них являются композитами). Спасибо! –