在使用之前更改p:autoComplete的completeMethod结果

时间:2018-04-18 09:04:08

标签: jsf primefaces autocomplete

我正在实施一个注册地址的对话框。在街道名称字段中,我使用PrimeFaces&#39; <p:autoComplete>标记可帮助用户找到其街道的名称。 completeMethod按预期工作,但为了避免类似街道名称之间的混淆,我希望下拉列表还包括给定街道所在的市政当局,例如格式为"<street name>, <municipality name>"

我不希望市政名称包含在实际字段中,所以我得出结论我需要一种执行某种字符串操作的方法(使用第一个逗号位置的子字符串,例如),但我无法弄清楚这种方法的调用方法。我已经浏览了PrimeFaces的文档,但我还没有找到任何可以让我这样做的东西。在<p:autoComplete>中这是否完全可以?或者,是否有另一个支持此功能的自动完成实现,或者我是否必须实现自己的javascript组件?

编辑:这就是我使用的xhtml代码:

<div class="form-group row required">
    <h:outputLabel value="#{msgs['@common.mailingAddress']}" for="address" styleClass="col-xs-12"/>
    <p:autoComplete
        id="address"
        name="address"
        size="50"
        maxlength="50"
        styleClass="col-xs-12 street-name"
        label="#{msgs['@common.search']}"
        disabled="#{not configurationController.cardCtrl.editable}"
        value="#{configurationController.cardCtrl.selected.address}"
        required="true"
        completeMethod="#{configurationController.cardCtrl.autoCompleteTest}">
        <f:validator binding="#{onlyLettersOrDigitsValidator}"/>
    </p:autoComplete>
    <h:message id="addressMessage" for="address" styleClass="inline-error inline-error-small"/>
</div>

控制器中的autoCompleteTest方法如下:

public List autoCompleteTest(String input) {
    AddressSearch addressSearch = AddressSearch.builder()
            .streetName(input)
            .municipality(municipality.getName())
            .maxResultsPerPage(10)
            .build();
    return addressesToStreetNames(mapService.addressSearch(addressSearch).getAddresses());
}

使用辅助方法addressesToStreetNames获取Address对象列表并返回包含这些地址的ArrayList<String>&#39}。街道名称。

EDIT2:根据评论中的建议,我尝试将itemValueitemLabel设置为不同的值,看看是否有任何影响。新的xhtml如上所示,增加了以下三行:

var="address"
itemValue="#{address.streetName}"
itemLabel="#{configurationController.cardCtrl.formatAddress(address.streetName, address.postTown)}"

autoCompleteTest方法现在也直接返回Address对象,而不是街道名称的String表示,以便这些字段可用。 formatAddress方法只是return streetName + ', ' + postTown; 这会导致下拉列表看起来我希望它看起来如何,但当我点击一个项目时,它仍然将整个字符串与街道名称和邮政城镇/市镇插入文本字段(事实上,在我之前写了任何东西,文本字段已包含&#34;,&#34;)。

0 个答案:

没有答案