ExtJs组合框显示字段编码

ExtJs Combobox displayField encoding

本文关键字:字段 编码 显示 组合 ExtJs      更新时间:2023-12-13

我有一个java web应用程序。我有一个实体类(当然在转换之后),我想在带有ExtJs的组合框中使用它。我的问题如下:

displayField中可能存在具有html代码的条目。因此,在使用flexjson进行序列化的过程中。JSONSerializer我使用了flexjson。HTMLEncoder使条目在下拉列表中可见(在它使屏幕因未终止的字符串文字而关闭之前)。到目前为止还不错。

editor.myCombo = new Ext.form.ComboBox({
    mode: 'local',
    editable: false,
    forceSelection: true,           
    triggerAction: 'all',
    store: new Ext.data.JsonStore({
        fields: ['myId', 'myName'],
        emptyItem: {'myName' : '...'},
        data: <c:out value="${form.json['myList']}" escapeXml="false"/>         
    }),
    disabled: isEditorDisabled,
    width: 75,
    listWidth: 160,
    displayField: 'myName',
    valueField: 'myId'
});

但是,当我从下拉列表中选择一个项目时(所有项目都像Alfred </script>一样正确显示),显示字段将显示为:Alfred &lt;/script&gt;

我该怎么做?为什么它显示编码版本(在json请求中检索)而不是HTML?

尝试在配置中包含一个重写的getDisplayValue方法。只需将其设置为返回解码值,如下所示:

editor.myCombo = new Ext.form.ComboBox({
    mode: 'local',
    editable: false,
    forceSelection: true,           
    triggerAction: 'all',
    store: new Ext.data.JsonStore({
        fields: ['myId', 'myName'],
        emptyItem: {'myName' : '...'},
        data: <c:out value="${form.json['myList']}" escapeXml="false"/>         
    }),
    disabled: isEditorDisabled,
    width: 75,
    listWidth: 160,
    displayField: 'myName',
    valueField: 'myId',
    // this should return the decoded string instead
    getDisplayValue: function() {
        return Ext.String.htmlDecode(this.value);
    }
});

之所以必须这样做,是因为Ext.form.field.Combo的实际字段部分实际上是一个HTML输入元素,它只会显示直接的文本,而不会从中生成HTML