3

私はJavaWebアプリケーションを持っています。ExtJとのコンボボックスで(もちろん変換後に)使用したいエンティティクラスがあります。私の問題は次のとおりです。

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;

これを機能させるにはどうすればよいですか?HTMLとしてではなく、エンコードされたバージョン(jsonリクエストで取得される)を表示しているのはなぜですか?

4

1 に答える 1

4

オーバーライドされた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を生成しないためです。

于 2012-07-26T05:30:03.043 に答える