La extensión de componentes JSF commandLink
Pregunta
I creó un componente Facelet de extender h:. CommandLink (para añadir alguna funcionalidad y esquinas redondeadas)
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<span class="btn-left btn-corners"> </span>
<span type="submit" class="submit">
<h:commandLink id="#{id}" value="#{label}" action="#{action}" />
</span>
<span class="btn-right btn-corners"> </span> </ui:composition>
Mi nuevo componente se puede acceder utilizando
<my:commandLink id="continue" label="continue" action="#{applyBacking.submit}"/>
y el código Java es
public String submit(){
...
}
Sin embargo, me da un error "ApplyBacking no tiene la propiedad de presentar". Entiendo la razón de este error, porque al intentar mostrar mi: commandLink, se trata de evaluar # {} applyBacking.submit a una propiedad. En su lugar, quiero que la información sobre el método a la invocada (applyBacking.submit) para ser pasada a la plantilla y evaluado mientras que la prestación h:. CommandLink
¿Alguna sugerencia?
Solución
Crea un href="http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/tld-summary.html" rel="nofollow"> componente compuesto lugar ( tutorial aquí ), que le permite para definir las acciones de frijol como attribtues.
Este es un ejemplo patada de salida:
/resources/components/commandLink.xhtml
<ui:component
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="id" required="true" />
<cc:attribute name="label" required="true" />
<cc:attribute name="action" method-signature="java.lang.String action()" required="true" />
</cc:interface>
<cc:implementation>
<span class="btn-left btn-corners"> </span>
<span type="submit" class="submit">
<h:commandLink id="#{cc.attrs.id}" value="#{cc.attrs.label}" action="#{cc.attrs.action}" />
</span>
<span class="btn-right btn-corners"> </span>
</cc:implementation>
</ui:component>
/somepage.xhtml
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:my="http://java.sun.com/jsf/composite/components">
<h:head>
<title>SO question 4608030</title>
</h:head>
<h:body>
<h:form>
<my:commandLink id="continue" label="continue" action="#{applyBacking.submit}"/>
</h:form>
</h:body>
</html>
Por cierto, yo personalmente prefiero usar JS / jQuery para la parte de esquinas redondeadas, por ejemplo la esquina jQuery plugin de . Sólo dar su commandLink un styleClass
específica y dejar JS hacer la magia.