You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Primefaces Autocomplete值为字符串且标签不同时下拉美化实现问题

我正在将Richfaces 3.3.3 + JSF 1.2项目迁移至Primefaces 7.0 + JSF 2.1版本,项目存在不少历史遗留的非最优实现,暂只能按现有逻辑调整。

已实现的两个独立可用场景

场景1:String类型value转label展示

value属性为String类型,初始化传入的value需转换为label展示:转换器toObject方法返回模型/value字符串,toString方法返回对应label,completeMethod返回label字符串列表,实现代码如下:

<p:autoComplete id="berufstitel1Suggestion" value="#{partner.berufsTitel1Key}" maxlength="100" disabled="#{fieldsDisabled}" queryDelay="500" 
    completeMethod="#{autoSuggestion75.getListForPFAutocomplete}" emptyMessage="Keine Treffer" dropdown="true" readonly="#{fieldsDisabled}" minQueryLength="2"
    converter="supportjsf.autocomplete.schluessel" forceSelection="true" scrollHeight="150" cache="true" >
    <f:attribute name="#{jsfUtilConstants.PARAM_SCHLARTCD}" value="#{regeldatenKonstantenPartnerS075.SCHLUESSEL_CD_BERUF_TITEL}" />
    <f:attribute name="#{jsfUtilConstants.PARAM_SUPPORTDATA}" value="#{supportData75}" />
    <f:attribute name="#{jsfUtilConstants.PARAM_KURZBEZ}" value="#{true}" />
</p:autoComplete>

场景2:label与value相同时的下拉美化

当label与value相同时,可通过var属性自定义下拉列展示,给选项增加额外信息美化,仅选择时展示美化内容,选中后回显正常label,实现代码如下:

<p:autoComplete id="ikzsuggestion" value="#{ptnAdr.adresse.staat}" maxlength="10" size="4" disabled="#{fieldsDisabled}" completeMethod="#{autoSuggBean[ikzSuggMethod]}"
        emptyMessage="Keine Treffer" dropdown="false" readonly="#{fieldsDisabled}" minQueryLength="2" forceSelection="true" scrollHeight="200" var="ikz" itemValue="#{ikz}"
        itemLabel="#{ikz}" queryDelay="500">
        <f:attribute name="#{jsfUtilConstants.PARAM_SUPPORTDATA}" value="#{supportData75}" />
        <p:column>
            <h:outputText value="#{ikz}" />
        </p:column>
        <p:column>
            <h:outputText value="#{ikz}" converter="ukisjsf.staatikz2bezeichnungconverter">
                <f:attribute name="#{jsfUtilConstants.PARAM_SUPPORTDATA}" value="#{supportData75}" />
            </h:outputText>
        </p:column>
</p:autoComplete>

待解决的问题

我无法实现两个场景的组合:即模型value与label为不同字符串,同时需要美化下拉框内的选项标签。我判断实现美化需要用到第二个示例中的var属性,但只要配置var相关逻辑就会出错,尝试多种方式都无法运行。

补充说明

我曾多次尝试用POJO实现,但由于value属性必须为String类型,且提交后需要支持组件重载,POJO方案始终不可用。
经过多日测试,两个基于String的独立场景均可行,但组合使用就会失效,请问有没有可行的解决方案?


内容的提问来源于stack exchange,提问作者Ande Hofer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 19:27:05