Какое пространство имен XML использовать с JSF 2.2 и выше

Я перенесла свое приложение с JSF 1.2 на 2.2.

Он использовал пространства имен XML в домене java.sun.com, например xmlns:f="http://java.sun.com/jsf/core". Однако учебник Oracle Java EE 7 использует пространства имен XML в домене xmlns.jcp.org, например xmlns:f="http://xmlns.jcp.org/jsf/core".

Какой из них рекомендуется и почему это было изменено?

Ответ 1

Какой из них рекомендуется?

Продолжайте использовать пространства имен XML в домене xmlns.jcp.org. Это было недавно введено с Java EE 7 в 2013 году (которое охватывает JSF 2.2, Servlet 3.1, CDI 1.1 и т.д.). Обратите внимание, что это влияет не только на файлы Facelets, но и на файлы конфигурации XML, такие как beans.xml faces-config.xml, web.xml, beans.xml и т.д.

Старые пространства имен XML на java.sun.com все еще существуют для обратной совместимости, но поддержка в конечном итоге исчезнет в будущей версии Java EE. Вы должны перенести свою кодовую базу как можно скорее. Это должно быть тривиальной задачей с использованием функции "найти и заменить во всех файлах", предлагаемой средней IDE.

Только в более старых версиях Mojarra 2.2.0/2.2.1 были ошибки, связанные с изменениями пространства имен XML, но они не должны проявляться в более новых версиях. Смотрите также


и почему это изменилось?

Потому что Java больше не принадлежит Sun с 2010 года. Обратите внимание, что они были умны, чтобы не делать это java.oracle.com или чем-то тесно связанным с нынешней компанией-владельцем. Теперь он красиво и независимо привязан к JCP (процессу сообщества Java), который действительно отвечает за управление спецификациями Java (EE).

Ответ 2

Я сделал краткое описание всех новых официальных пространств имен оракула:

<!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
    xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:cc="http://xmlns.jcp.org/jsf/composite"
    xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"      
    xmlns:jsf="http://xmlns.jcp.org/jsf">

    <!-- Content here -->
</html>

Я использую это как шаблон для всех моих файлов .xhtml. Подробности можно найти в официальной библиотеке тегов facelet: JavaServer Faces 2.2 Документация библиотеки тегов Facelets

Надеюсь это поможет :)

Ответ 3

Для будущих посетителей, имеющих путаницу/проблему пространства имен:

Я хотел бы выделить общий способ выяснить, какое пространство имен использовать:

  • Если вы хотите использовать теги из библиотеки тегов HTML JSF или библиотеки основных тегов JSF, откройте JAR файл реализации JSF (например, Oracle Mojarra, Apache MyFaces- MyFaces-impl-2.3.1.jar) и найдите библиотеку тегов .tld или .xml файл (вы можете найти его в каталоге META-INF) и использовать пространство имен, упомянутое там.
  • Если вы хотите использовать RichFaces или PrimeFaces, откройте их реализацию JAR (например, richfaces-components-ui-4.0.0.Final.jar или primefaces-6.2.jar) и сделайте то же самое, что и выше.

Если в реализации есть .tld (например, rich.tld), вы можете использовать значение элемента <uri> например <uri>http://richfaces.org/rich</uri>. И если в реализации есть .xml (например, rich.taglib.xml), то вы можете использовать значение элемента <namespace> например <namespace>http://richfaces.org/rich</namespace>

То, что я упомянул выше, имеет прямое отношение к JSF, но в целом остается в силе. Ключевым моментом является то, что если вы используете пространство имен из JAR реализации, то у вас никогда не возникнет проблем.