I have set up tableSuggestAjax as per every example I have seen anywhere. (code below)
One problem I am having is that even though all examples say the "suggestedItemsMethod" is expecting a String parameter, if I have any parameters in the actual method signature I get an EL exception. I had the same problem with inputSuggestAjax.
<s:tableSuggestAjax var="refData" id="incomeExpenseSuggest" startRequest="2"
nextPageFieldClass="ajaxNextTablePageField"
value="#{applicantOperationDetailsBackingBean.foo}" betweenKeyUp="300"
columnOutClass="tableSuggestOut" columnHoverClass="tableSuggestHover"
suggestedItemsMethod="#{applicantOperationDetailsBackingBean.suggestIncomeExpenseDescriptions}"
tableStyleClass="ajaxTable" charset="utf-8">
<t:column>
<f:facet name="header">
<s:outputText value="Income Type"/>
</f:facet>
<s:outputText for="incomeExpenseSuggest" label="#{refData.englishName}"/>
</t:column>
<t:column>
<f:facet name="header">
<s:outputText value="Code"/>
</f:facet>
<s:outputText for="code" label="#{refData.typeCode}"/>
</t:column>
</s:tableSuggestAjax>
public List getSuggestIncomeExpenseDescriptions(String value) {
List<ReferenceData > result = new ArrayList<ReferenceData>();
if (this.incomeAndExpenseRefData == null) {
// initialize once
this.incomeAndExpenseRefData = getRefDataService()
.getReferenceDataList(RefDataTypes.INCOME_EXPENSE_TYPE);
}
for (Iterator iter = incomeAndExpenseRefData.iterator(); iter.hasNext();) {
ReferenceData rd = (ReferenceData) iter.next();
if ((value != null) &&
rd.getEnglishName().toLowerCase().contains(value.toLowerCase())) {
String data = rd.getEnglishName()+" ("+rd.getTypeCode()+")";
result.add(data);
}
}
return result;
}