Сначала давайте начнем с того, что источник PrimeFaces ОТКРЫТ, он легко отлажен. Простой поиск по источнику (локально в вашей IDE или в GitHub) даст вам источник Jsf22Helper.java . Вы можете проверить, где это называется. Запуск в режиме отладки является самым простым, но поиск в репозитории PrimeFaces в GitHub показывает только одно местоположение в CoreRenderer.java
protected void renderDynamicPassThruAttributes(FacesContext context, UIComponent component) throws IOException {
if (PrimeApplicationContext.getCurrentInstance(context).getEnvironment().isAtLeastJsf22()) {
Jsf22Helper.renderPassThroughAttributes(context, component);
}
}
Далее вы должны осмотреть
PrimeApplicationContext.getCurrentInstance(context).getEnvironment().isAtLeastJsf22()
И получатель для этого возвращает свойство, которое получает его логическое значение из
atLeastJsf22 = LangUtils.tryToLoadClassForName("javax.faces.flow.Flow") != null;
Здесь вы видите, что для определения «минимальной» версии они пытаются загрузить класс, который только присутствует в JSF 2.2 или более поздней версии. Это означает, что независимо от того, используете ли вы первую родительскую загрузку классов или нет, или независимо от того, куда вы положили PrimeFaces, если javax.faces.flow.Flow
находится на пути к классам, PrimeFaces будет считать, что JSF 2.2 доступен. Не имеет значения, является ли JSF 2.1 также на пути к классам и даже до JSF 2.2, поскольку этот конкретный класс отсутствует в JSF2.1 и будет всегда загружаться из JSF 2.2 jar .
Чтобы исправить это, у вас есть три варианта
- Переопределить PrimeFaces
PrimeEnvironment.java
(например, путем чтения явного свойства контекста из web.xml, чтобы вы могли при необходимости вручную переопределить обнаружение версии и создать для него запрос на извлечение с помощью PrimeFaces, чтобы они могли принять это как улучшение
- «Правильный» способ переопределить версию JSF, аналогичную Как заставить websphere 8.5 использовать mojarra, а не myfaces
- Переключиться на JSF 2.2
Последний был бы лучшим и мог бы даже работать из коробки.