Какое пространство имен 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 реализации, то у вас никогда не возникнет проблем.