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

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

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

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

3 ответа

Решение

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

Продолжайте с пространствами имен XML на xmlns.jcp.org домен. Это было недавно введено с Java EE 7 в 2013 году (которое охватывает JSF 2.2, Servlet 3.1, CDI 1.1 и т. Д.). Обратите внимание, что это влияет не только на файлы Facelets, но и на файлы конфигурации 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).

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

<!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

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

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

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

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

Другие вопросы по тегам