2010-12-07 9 views
0

Ich kann nicht zur Arbeit kommen. Ich benutze Icefaces und ein sehr einfaches mit zwei Spalten. Einer mit Aktionen wie Entfernen und der andere mit einer Zeichenfolge (die einen regulären Ausdruck darstellt). Damit die Aktion Entfernen Sie die richtige Zeile zu entfernen, ich versuche es auf das eigentliche Element mit einem zu verknüpfen:<f: propertyActionListener> Tag nicht gefunden

<html xmlns:ice="http://www.icesoft.com/icefaces/component" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:m="http://www.mitre.org/asias/jsf"> 
    <ui:composition> 
    <ice:dataTable binding="#{binding}" 
     value="#{binding.editableRows}" 
     var="item"> 
     <ice:column> 
     <f:facet name="header"> 
      <ice:commandLink styleClass="linkBlue" 
      action="#{binding.addEditableRow}"> 
      <ice:outputText value="Add" /> 
      </ice:commandLink> 
     </f:facet> 
     <ice:commandLink styleClass="linkBlue" 
      action="#{binding.removeEditableRow}"> 
      <f:propertyActionListener value="#{item}" target="#{binding.actionRow}" /> 
      <ice:outputText value="Remove" /> 
     </ice:commandLink> 
     </ice:column> 
     <ice:column> 
     <f:facet name="header"> 
      <ice:outputText value="Regular Expression" /> 
     </f:facet> 
     <ice:inputText value="#{item.object}" size="100" /> 
     </ice:column> 
    </ice:dataTable> 
    </ui:composition> 
</html> 

Alles, was ich zu diesem Thema gefunden haben, sagt, dass ich brauche JSF 1.2. Ich benutze JSF 1.2. Hier ist die Apache Ivy Config-Datei Ich verwende meine Abhängigkeiten zu verwalten:

<ivy-module version="2.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 

<info organisation="org.mitre.asias" module="testwebproject" /> 

    <configurations defaultconfmapping="default->default"> 
     <conf name="default" visibility="public" description="needed for deployment" extends="runtime,master" /> 
     <conf name="master" visibility="public" description="only this artifact" /> 
     <conf name="runtime" visibility="public" description="libraries only needed at runtime" extends="compile" /> 
     <conf name="provided" visibility="public" description="provided by container, not needed for deployment" /> 
     <conf name="test" visibility="private" description="needed for testing" /> 
     <conf name="compile" visibility="public" description="needed for compilation" /> 
     <conf name="sources" visibility="public" description="the source artifact, if any."/> 
     <conf name="javadoc" visibility="public" description="the javadoc artifact, if any."/> 
     <conf name="optional" visibility="public" description="contains all optional dependencies"/> 
     <conf name="ide" visibility="public" description="all libraries, sources, and javadoc needed for ide" extends="master,compile,provided,test,sources,javadoc" /> 
    </configurations> 

<dependencies> 
     <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="log4j" name="log4j" rev="1.2.16" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.1" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 

     <dependency org="javax.el" name="el-api" rev="2.1.2-b05" conf="provided->compile(*),provided(*),runtime(*),master(*)" /> 
     <dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="provided->compile(*),provided(*),runtime(*),master(*)" /> 
     <dependency org="javax.servlet" name="jsp-api" rev="2.0" conf="provided->compile(*),provided(*),runtime(*),master(*)" /> 
     <dependency org="org.icefaces" name="icefaces" rev="1.8.2" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="org.icefaces" name="icefaces-comps" rev="1.8.2" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="org.icefaces" name="icefaces-facelets" rev="1.8.2" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="javax.faces" name="jsf-api" rev="1.2_13" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="javax.faces" name="jsf-impl" rev="1.2_13" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 
     <dependency org="com.sun.facelets" name="jsf-facelets" rev="1.1.14" conf="compile->compile(*),master(*);runtime->runtime(*)" /> 

     <dependency org="junit" name="junit" rev="4.8.1" conf="test->default" /> 

     <exclude module="servlet-api" conf="default" /> 
     <exclude module="el-api" conf="default" /> 
     <exclude module="jsp-api" conf="default" /> 
</dependencies> 
</ivy-module> 

Ich verwende Eclipse mit IvyDE, um diese Bibliothek zu verwalten und eine Tomcat-Server-Instanz läuft mit „Use Arbeitsbereich Metadaten“ ausgewählt. Gibt es eine Eclipse- oder Tomcat-Sache, die möglicherweise die falsche Version von JSF enthält? Wenn ich mir das jsf-impl jar ansehe, das von Ivy mitgeliefert wird, sehe ich, dass com.sun.faces.taglib.jsf_core.SetPropertyActionListenerImpl und SetPropertyActionListenerTag in diesem jar enthalten sind. Es ist mein Verständnis, dass diese alles sein sollten, was benötigt wird. Irgendwelche Ideen? Fehle ich etwas oder verrück 'ich einfach nur verrückt?


EDIT:

Jetzt erhalte ich wirklich frustriert. Nach dem Vorschlag von BalusC habe ich meine faces-config.xml aktualisiert, um die 1.2 Schema Definition anstelle von 1.1 dtd zu verwenden. Das hat nicht geholfen. Also suche ich nach mehr Informationen. Ich finde einen anderen stackoverflow-Artikel zu (this issue), jedoch gab es keine andere Lösung als eine neue Version von jsf-facelets.jar (von der die neue/alte Version nicht aufgeführt ist). Ich verwende die neueste Version, die auf repo1.maven.org/maven2 (1.1.14) verfügbar ist. Also geh nicht auf diese Front. Meine neuen Fragen sind, warum haben Facelets damit zu tun? Es ist ein Teil des JSF-Kerns, nicht wahr? Ich bemerke, dass in meinem JSF-impl-1.2_13.jar :: META-INF/jsf_core.tld gibt es einen Tag für setPropertyActionListener ist:

<tag> 
    ... 
    <name>setPropertyActionListener</name> 
    <tag-class>com.sun.faces.taglib.jsf_core.SetPropertyActionListenerTag</tag-class> 
    <body-content>empty</body-content> 
    ... 
</tag> 

Obendrein kann dies in meinem gefunden werden JSF-facelets-1.1.14.jar :: com/sun/facelets/tag/JSF/core/CoreLibrary.java:

... 
this.addTagHandler("setPropertyActionListener", SetPropertyActionListenerHandler.class); 
... 

Es sieht aus wie meine eingebundenen Bibliotheken ausreichend sein sollte. Irgendeine Idee, was hier vor sich geht? Muss ich zurückgehen und einen Abschluss in JSF machen, um ein einfaches Facelet schreiben zu können?

Antwort

1

Stellen Sie sicher, dass die Stammdeklaration Ihres faces-config.xml gemäß JSF 1.2-Spezifikation deklariert ist.

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 

Ferner ist die binding="#{binding}" in Ihrer Datentabelle wirklich nicht richtig aussehen, da #{binding} scheint eine Managed Bean zu sein.

+0

Ich wusste das nicht über Faces-Config mit Version = "1.2". Ich werde bis morgen warten müssen, um das zu testen, da ich im Moment nicht vor dem Code bin. Was die binding = "# {binding} betrifft, tue ich das, weil dieses Facelet in eine andere Seite mit einem -Tag eingefügt werden soll, um die Bindungsvariable in diesem Code bezieht sich auf das in diesem Tag definierte. Vielen Dank für Ihre Antwort und ich werde sicher sein, dies als die Antwort zu aktualisieren, wenn es funktioniert. – Lucas

+0

Auch die 'xsi: schemaLocation' ist anders. Wie für die Bindung, sollte es beziehen sich auf ein' UIComponent' ist keine gemanagte Bean. Ist es wirklich eine 'UIComponent'? – BalusC

+0

Nochmals vielen Dank, ich habe den SchemaLocation-Unterschied nicht bemerkt. Und, ja, es ist eine Erweiterung von HtmlDataTable, um als Bindung für meine ice: dataTable zu arbeiten. – Lucas

1

Ich hasse es wirklich meine eigene Frage zu beantworten, besonders da es ein so simpler Fehler war, aber manchmal müssen wir einfach nur die öffentliche Demütigung akzeptieren. Wie auch immer, lange Geschichte kurz, sein:

<f:setPropertyActionListener value="#{item}" target="#{binding.actionRow}" /> 

nicht

<f:propertyActionListener value="#{item}" target="#{binding.actionRow}" /> 

Hoffentlich wird dies jemand anderes in der Zukunft helfen ...

+0

Oh Junge, ich habe diesen auch vermisst. – BalusC

Verwandte Themen