Olá
Estou tentando criar um componente composto no primefaces, usando autocomplete e watermark.
Aqui está o código do CC
<composite:interface>
<composite:attribute name="textWatermark" required="false" />
<composite:attribute name="converter" required="false" default="entityConverter"/>
<composite:attribute name="update" required="true"/>
<composite:attribute name="value" required="true"/>
<composite:attribute name="completeMethod" required="true" method-signature="java.util.List action(java.lang.String)"/>
<composite:attribute name="itemLabel" required="false" default="#{r}"/>
<composite:attribute name="listener" method-signature="void listener()"/>
</composite:interface>
<composite:implementation>
<p:autoComplete completeMethod="#{cc.attrs.completeMethod}" maxResults="10" minQueryLength="3" size="60"
forceSelection="true" id="myAutocomplete" var="r" itemValue="#{r}" itemLabel="#{cc.attrs.itemLabel}"
style="font-size: x-large" value="#{cc.attrs.value}">
<f:converter converterId="#{cc.attrs.converter}"/>
<p:ajax event="itemSelect" listener="#{cc.attrs.listener}" update="#{cc.attrs.update}"/>
</p:autoComplete>
<p:watermark for="myAutocomplete" value="#{cc.attrs.textoWatermark}" rendered="#{cc.attrs.textoWatermark != null}" />
</composite:implementation>
Aqui está uma parte do código do Managed Bean
private MyEntity mySelectedValue;
public void handleSelect() {
System.out.println("***** selected value: " + mySelectedValue); // mySelectedValue é sempre nulo neste ponto
}
// Getters and Setters
E aqui está o código da página “cliente”
<h:form id="formquery">
<mycomp:myAutocomplete
update=":messages"
completeMethod="#{myBean.complete}"
listener="#{myBean.handleSelect()}"
value="#{myBean.mySelectedValue}"/>
</h:form>
O problema é que, aparentemente, o valor nunca é passado para o Managed Bean. Esse código funcionava antes de eu colocá-lo no componente composto, e se eu substituo {cc.attrs.value} por #{myBean.mySelectedValue} o valor é passado corretamente para o MB.
Acho que estou esquecendo algo, qualquer ajuda é muito bem vinda!