<f:propertyActionListener> tag not found
I cant seem to get to work. I am using icefaces and a very simple with two columns. One with actions such as remove and the other with a string (representing a regular expression). In order for the remove action to remove the right row, I am trying to link it to the actual element with an :
<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>
Everything I have found on this says that I need JSF 1.2. I am using JSF 1.2. Here is the apache Ivy config file I am using to manage my dependencies:
<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>
I am using eclipse with IvyDE to manage that library and a Tomcat server instance running with "Use workspace metadata" selected. Is there some eclipse or tomcat thing that might be injecting the wrong version of JSF? When I look at the jsf-impl jar that is included by Ivy, I do see that there are com.sun.faces.taglib.jsf_core.SetPropertyActionListenerImpl and SetPropertyActionListenerTag in that jar. It is my understanding that those should be all that is needed. Any Ideas? Am I missing something, or just plain going crazy?
EDIT:
Now I'm getting really frustrated. Per the suggestion from BalusC I updated my faces-config.xml to use the 1.2 schema definition instead of the 1.1 dtd. This did not help. So I search around for more information. I find another stackoverflow article pertaining to (this issue), however there was no resolution other than getting a new version of jsf-facelets.jar (of which the new/old version is not listed). I am using the latest version available on repo1.maven.org/maven2 (1.1.14). So no go on that front. My new questions are, why would facelets have anything to do with this? Its a part of the JSF core is it not? I notice that in my jsf-impl-1.2_13.jar::META-INF/jsf_core.tld, there is a tag for setPropertyActionListener:
<tag>
...
<name>setPropertyActionListener</name>
<tag-class>com.sun.faces.taglib.jsf_core.SetPropertyActionListenerTag</tag-class>
<body-content>empty</body-content>
...
</tag>
On top of that, this can be found in my jsf-facelets-1.1.14.jar::com/sun/facelets/tag/jsf/core/CoreLibrary.java:
...
this.addTagHandler("setPropertyActionListener", SetPropertyActionListenerHandler.class);
...
It looks like my included libraries should be sufficient. Any idea what is going on here? Do I need to go back and get a degree in JSF to be able to write a simple facelet?
Ensure that the root declaration of your faces-config.xml
is declared as per JSF 1.2 specification.
<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">
Further, the binding="#{binding}"
in your datatable really doesn't look right since #{binding}
seems to be a managed bean.
I really hate to answer my own question, especially since it was such a simple mistake, but sometimes we just have to fess up and accept the public humiliation. Anyway, long story short, its:
<f:setPropertyActionListener value="#{item}" target="#{binding.actionRow}" />
not
<f:propertyActionListener value="#{item}" target="#{binding.actionRow}" />
Hopefully, this will help someone else in the future...
精彩评论