Что диктует версия JSF? Контейнер или лица-конфиг?

В настоящее время я использую устаревшее приложение JSF на JBoss AS 4.3. Я считаю, что это реализует JSF 1.2. Тем не менее, когда я посмотрел на face-config, я увидел, что он использует DTD JSF 1.1.

Какую версию JSF я использую?

1 ответ

Решение

Точная информация о версии реализации JSF доступна в /META-INF/MANIFEST.MF файл JAR-файла реализации JSF. Обычно он располагается в нижней части файла манифеста следующим образом:

Implementation-Title: Mojarra
Implementation-Version: 1.2_12-b01-FCS
Implementation-Vendor: Sun Microsystems, Inc.

Файл JAR можно открыть с помощью инструмента ZIP. В случае Sun RI / Mojarra, имя файла jsf-impl.jarиногда уже с суффиксом точного номера версии, например jsf-impl-1.2_12-b01-FCS.jar, Если вы используете реализацию JSF, предоставленную JBoss 4.3.x, то вы можете найти файл в $JBOSS_HOME/server/<Profile>/deploy/jboss-web.deployer/jsf-libs папка. Если вы предоставили свою собственную реализацию JSF в /WEB-INF/lib и настроен web.xml чтобы сказать JBoss использовать его вместо этого, вам нужно проверить его в /WEB-INF/lib вместо.

Или вы можете получить это программно:

Package jsfPackage = FacesContext.class.getPackage();
String implTitle = jsfPackage.getImplementationTitle();
String implVersion = jsfPackage.getImplementationVersion();
String implVendor = jsfPackage.getImplementationVendor();

Что касается faces-config.xmlс его помощью вы также можете контролировать, для какой версии JSF разработано приложение. Таким образом, если вы объявили, что он соответствует спецификации JSF 1.1, то даже реализация JSF 1.2/2.0 будет работать в JSF 1.1 "режим совместимости". Но вы не можете объявить, что он соответствует более новой версии, такой как JSF 1.2/2.0, когда вы на самом деле используете реализацию JSF 1.1. Это будет либо ошибка, либо будет проигнорировано.

Другие вопросы по тегам