Свойства новых тегов, использующих составной компонент, не отображаются в Eclipse auto complete shortcurt

Я разработал составные компоненты, используя JSF 2.0 в Eclipse. Я помещаю свои файлы тегов XHTML внутрь resources папка.

Когда я нажимаю Ctrl + пробел на клавиатуре, свойство тега не отображается.

Я нашел несколько советов по установке "инструментов Jboss", но они не сработали.

<?xml version='1.0' encoding='UTF-8' ?>
<!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:cc="http://xmlns.jcp.org/jsf/composite"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">

    <cc:interface>
        <cc:attribute name="value"/>
        <cc:attribute name="label"/>
        <cc:attribute name="masculino" default="true"/>
    </cc:interface>

    <cc:implementation>
        <p:selectOneMenu value="#{cc.attrs.value}" label="#{cc.attrs.label}">
            <f:selectItem itemValue="#{null}"
                          itemLabel="#{cc.attrs.masculino ? lbl['LABEL.TODOS'] : lbl['LABEL.TODAS']}" />
            <f:selectItem itemValue="true" itemLabel="#{lbl['LABEL.SIM']}" />
            <f:selectItem itemValue="false" itemLabel="#{lbl['LABEL.NAO']}" />
        </p:selectOneMenu>                                  
    </cc:implementation>

</html>

Выше приведен пример создания одного тега.

Спасибо

2 ответа

Поддержка JSF 2.x Facelets интегрирована в " Eclipse IDE для разработчиков Java EE" (обратите внимание на EE, а не "Eclipse IDE для разработчиков Java"), начиная с Eclipse Helios (версия 3.6, выпущенная в июне 2010 г.). Необходимо убедиться, что фасет JavaServer Faces включен в разделе " Фасеты проекта" в свойствах проекта и имеет минимальную версию 2.0.

Обычно это настраивается во время работы в новом мастере Dynamic Web Project, но при импорте не-Eclipse-проектов или создании не-Dynamic Web Project- проектов (например, архетипов Maven) вам необходимо вручную проверить / добавить его.

После интеграции автозаполнение тега JSF по умолчанию доступно в java.sun.com Пространство имен XML.

Новый xmlns.jcp.org пространство имен не распознается по умолчанию (в настоящее время протестированная версия Eclipse - Luna SR2).

Новый xmlns.jcp.org Пространство имен будет работать только в том случае, если вы добавили физическую реализацию JSF 2.2 для построения пути во вкус полноценного контейнера Java EE с JSF 2.2 в своих модулях, интегрированного через приличный серверный плагин и установленного как Targeted Runtimes в свойствах проекта, или конкретный файл JAR реализации JSF 2.2 в /WEB-INF/lib в случае Tomcat и клонов (или путем добавления его в качестве зависимости Maven).

Он только до сих пор не распознает композиты в новом пространстве имен XML. При переходе обратно на java.sun.comзавершение кода для составных тегов компонентов вернулось, но завершение кода для атрибутов этих тегов недоступно.

Затем я установил JBoss Tools 4.2.3 для Eclipse Luna и включил базу знаний JBoss Tools в свойствах проекта.

После закрытия и повторного открытия Facelet (поэтому открывается встроенный HTML-редактор JBoss; вы можете установить / настроить редактор, используемый правой кнопкой мыши, Open With) и переключиться на вкладку Source (не используйте Visual editor, это катастрофа) Я наконец получил завершение кода атрибутов на составных компонентах.

Только xmlns.jcp.org все еще не работал. Это проблема, специфичная для Eclipse, и, вероятно, она уже исправлена ​​на Марсе или новее. Вы всегда можете скрыть составное пространство имен за пользовательским пространством имен XML, как показано ниже:

/WEB-INF/my.taglib.xml

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd"
    version="2.2"
>
    <namespace>http://example.com/my</namespace>
    <composite-library-name>components</composite-library-name>
</facelet-taglib>

/WEB-INF/web.xml

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>

Итак, подведем итог:

  • Включите фасет проекта JSF в свойствах проекта для завершения кода в составных тегах.
  • Установите JBoss Tools для завершения кода на атрибутах в составных тегах.
  • Включите базу знаний JBoss Tools в свойствах проекта.
  • Иметь физический JSF 2.2 impl JAR в buildpath для xmlns.jcp.org поддержка стандартных тегов.
  • использование java.sun.com Домен пространства имен XML или пользовательская метка (или более новая версия Eclipse) для составных меток.

Я использую Eclipse Mars с пакетом Java EE, инструментами Hibernate и Spring IDE, и я только что проверил, что это работает из коробки.

Убедитесь, что ваш компонент находится под webapp/resources/YOUR_COMP_NAME,

Игнорируйте это, см. Издание ниже: Проверьте пространство имен заголовка для compositeв вашем примере кода у вас есть

xmlns:cc="http://xmlns.jcp.org/jsf/composite"

но в моем коде у меня есть

xmlns:composite="http://java.sun.com/jsf/composite"

Не важно, используете ли вы cc пр composite префикс, но, как вы можете видеть, URL отличается. Смотрите этот документ

Наконец, когда вы используете этот композит на любой странице xhtml, включите его следующим образом:

xmlns:prefix="http://java.sun.com/jsf/composite/YOUR_COMP_NAME"

Таким образом, когда вы пишете в затмении <prefix: и нажмите Ctrl + пробел, он покажет вам список компонентов, которые у вас есть.

редактировать

Я только что понял, что http://xmlns.jcp.org/jsf/composite это новый URL в замене http://java.sun.com/jsf/composite, поэтому я изменил его в своем коде, и он уже работает.

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