JSF MethodExpression javax.el.PropertyNotFoundException

Próbuję opracować niestandardowy komponent, który będzie musiał wywołać metodę z bazy backingbean, aby uzyskać pewne dane z bb (zostanie to wywołane w fazie dekodowania po pewnym wywołaniu Ajax) z jednym parametrem (przyjdzie w wywołanie ajax).

Mam problem jest to, że zdefiniuję atrybut jako MethodExpression (w taglibrary i komponencie), otrzymuję post Ajax, dekoduję parametr i kiedy próbuję uzyskać powiązanie metody z komponentu, otrzymuję następujący błąd :

javax.el.PropertyNotFoundException: /easyFaces.xhtml @ 19,151 dataSource = "# {theBean.loadDataFromSource}": Klasa „ar.com.easytech.faces.test.homeBean” nie ma właściwości „loadDataFromBean”.

Oto odpowiedni kod .. (i daj mi znać, jeśli nie jest to właściwy sposób na zrobienie tego ..)

taglib:

<attribute>
    <display-name>Data Source</display-name>
    <name>dataSource</name>
    <required>true</required>
    <type>javax.el.MethodExpression</type>
    <method-signature>java.util.List theDataSource(java.lang.String)</method-signature>
</attribute>

Definicja komponentu:

public class Autocomplete extends HtmlInputText implements ClientBehaviorHolder 
...
    public MethodExpression getDataSource() {
        return (MethodExpression) getStateHelper().eval(PropertyKeys.dataSource);
    }

    public void setDataSource(MethodExpression dataSource) {
        getStateHelper().put(PropertyKeys.dataSource, dataSource);
    }

i wreszcie metoda renderowana, która generuje błąd:

private List<Object> getData(FacesContext context, Autocomplete autocomplete, String data) {

    Object dataObject = null;
    MethodExpression dataSource = autocomplete.getDataSource();

    if (dataSource != null) {
        try {
            dataObject = dataSource.invoke(context.getELContext(), new Object[] {data});
            return convertToList(dataObject);
        } catch (MethodNotFoundException e) {
            logger.log(Level.INFO,"Method not found: {0}", dataSource.getExpressionString() );

        }
    }
    return null;

}

Oto metoda z BB

public List<String> autcompleteFromSource(String param) {

    List<String> tmpData = new ArrayList<String>();
    tmpData.add("XXA_TABLE_A");
    tmpData.add("XXA_TABLE_B");
    tmpData.add("XXA_TABLE_C");

    return tmpData;
}

I .xhtml z komponentem

<et:autocomplete id="autoc" minLength="3" delay="500" value="#{easyfacesBean.selectedValue}" dataSource="#{easyfacesBean.autcompleteFromSource}" />

Chodzi o to, że jeśli zdefiniuję metodę getAutocompleteFromSource (), rozpozna ona metodę i zmiany błędów w liście nie do konwersji na MethodExpression, więc najwyraźniej po prostu interpretuje autocompleteFromSource jako prostą właściwość, a nie definicję metody, czy to jest nawet poprawny sposób wywołania metody z BB? (podając, że nie jest to rzeczywiste działanie ani walidacja)

questionAnswers(1)

yourAnswerToTheQuestion