Wie man Eclipse autocomplete Arbeit mit JSF composite-Bauteilen in GLAS?
Hintergrund /Problem
Ich versuche, erstellen Sie eine wiederverwendbare JSF composite component, die geteilt werden können zwischen vielen Anwendungen durch Verpackung der Komponenten in jars (ähnlich Bereitstellen von JSF composite-Komponenten für die gemeinsame Nutzung und JSF 2.0 composite-Komponente in Glas).
Wenn Sie versuchen zu finden, die diese Komponenten in einer facelets-Seite von einem web-Projekt in Eclipse, ist es nicht von AutoVervollständigen (content-assist), die tags oder Attribute von meiner composite component.
Unter Verwendung der gleichen composite-Komponente jar in NetBeans funktioniert (autocompletion funktioniert!).
Kurze Zusammenfassung
-
Eclipse (eigentlich Rational Software Architect 8.0.4.1 - basierend auf Eclipse Helios)
-
Web-Projekt mit Dynamischen web-Modul und JSF Facetten aktiviert
-
Composite-Komponente jar über den build-path
-
Composite-Bauteil-namespace deklariert facelets-Seite (interessanterweise funktioniert die AutoVervollständigen-namespace, string meiner Komponente)
-
Nur die standard-JSF-tags autocomplete (h:, f:, ui:, etc), sowie Primefaces (p:)
-
Keine Autovervollständigung für meine composite-Komponente 🙁
-
Autocompletion funktioniert wenn ich verschieben Sie die Komponente an einem web-Projekt und verbrauchen Sie es von dort aus (aber dann ist es nicht mehr wiederverwendbar in anderen Projekten!)
Die details
Composite-Komponente jar-Struktur
Meine zusammengesetzte Komponente jar hat die folgende Struktur, wenn Sie kompiliert (ich bin tatsächlich mit Maven, so dass die source-Struktur ist ein wenig anders).
composite-component.jar
|- META-INF/
| |- beans.xml (empty - just the beans tag)
| |- faces-config.xml (empty - just the faces-config tag/attributes)
| \- resources
| \- example
| \- country.xhtml
\- com
\- example
|- Country.java
|- CountryController.java (the CDI managed bean)
Composite-Bauteil-definition
Land.xhtml hat den folgenden Inhalt
<?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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<!-- INTERFACE -->
<cc:interface>
<cc:attribute name="value"
shortDescription="A value expression for the selected value."
required="true" />
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<p:autoComplete value="#{cc.attrs.value}"
completeMethod="#{countryController.complete}" var="country"
itemLabel="#{country.name}" itemValue="#{country.code}" dropdown="true"
forceSelection="true">
</p:autoComplete>
</cc:implementation>
</html>
Managed bean
Meine CDI managed bean hat folgenden Inhalt
package example;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
@ApplicationScoped
@Named
public class CountryController {
private static final List<Country> COUNTRIES = Arrays.asList(
new Country("AUS", "Australia"),
new Country("FRA", "France"),
new Country("USA", "United States of America"));
public List<Country> complete(String query) {
List<Country> suggestions = new ArrayList<Country>();
for (Country c : COUNTRIES) {
if (c.getName().toLowerCase().contains(query.toLowerCase())) {
suggestions.add(c);
}
}
return suggestions;
}
}
Verzehr der composite-Komponente
Ist, wenn ich ein JSF-Projekt in NetBeans und meine composite-Komponenten (Primefaces), um den build path, add den richtigen namespace zu meinem facelets-Seite (xmlns:x="http://java.sun.com/jsf/composite/example"
) es funktioniert einfach.
Bekomme ich die Autovervollständigung auf meine Komponente, die Attribute, und es verwendet sogar die Dokumentation von meiner Komponente definition.
Wenn ich die gleiche zusammengesetzte Komponente jar in den build-path von meinem Eclipse-Projekt web (JSF facet aktiviert), ich bekomme nichts. Es autocompletes für standard-JSF-tags und für Primefaces, aber nicht für meine Komponente.
Habe ich bemerkt, dass Primefaces verwendet eine taglib-Datei - ist das, was erforderlich ist für mein Szenario? Ich würde es hassen zu müssen, duplizieren Sie die Informationen, um die Autovervollständigung zu arbeiten.
Edit:
Als tasel vorgeschlagen hat, die beste Lösung (bisher) ist zu installieren JBoss Tools (insbesondere die RichFaces-plugin). Dies ermöglicht eine Autovervollständigung für composite-Bauteile verpackt in jar-Dateien (einschließlich dem einfügen alle obligatorischen Attribute für Sie und autocompleting alle anderen Attribute mit dem schweben Dokumentation).
Ich würde auch empfehlen die Installation der JBoss Tools CDI-plugin, wenn Sie mit CDI, wie dieses gibt Ihnen die Autovervollständigung für CDI managed beans und deren Eigenschaften/Methoden.
Den Eclipse-update-site-URLs sind:
Helios:
http://download.jboss.org/jbosstools/updates/stable/helios/
Indigo:
http://download.jboss.org/jbosstools/updates/stable/indigo/
Ich habe Probleme bei der Installation von der update-site-URL und landete Download der p2-repo aus der update-Seite und installieren Sie es lokal, aber abgesehen davon, dass ich bin sehr glücklich über die Autovervollständigung funktioniert in Eclipse!
InformationsquelleAutor James Bassett | 2012-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider die Unterstützung für JSF in Eclipse ist nicht so komfortabel wie in NetBeans.
Ich bevorzuge die Verwendung der RichFaces Tools plugin von jBoss (funktioniert perfekt ohne RichFaces und mit jedem container). Sie könnten es versuchen.
Bessere Unterstützung für JSF wird als verfügbar betrachtet, mit der aktuellen eclipse release "Juno", obwohl ich habe es noch nicht versucht.
Danke, das funktioniert! Einige Rufpunkte 🙂
Du bist Willkommen 🙂
InformationsquelleAutor tasel