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


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

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

1 6

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. Он либо ошибется, либо будет проигнорирован.