что диктует версия JSF? Контейнер или лица-конфиг? - PullRequest
6 голосов
/ 17 февраля 2012

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

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

1 Ответ

12 голосов
/ 17 февраля 2012

Точная информация о версии реализации 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. Он либо выдаст ошибку, либо будет проигнорирован.

...