Экранирование специальных символов html в столбце datagrid

#datagrid #flex4 #htmlspecialchars #labelfunction

#datagrid #flex4 #htmlspecialchars #функция маркировки #labelфункция

Вопрос:

у меня есть datagrid (6 столбцов), который отображает строки из базы данных. Я пытаюсь использовать labelфункцию для экранирования специальных символов html в строке (например, amp;apos, amp;amp и т.д.).

Я нашел это в сети :

 protected function makeSpecialChars(item:Object,dgName:DataGridColumn):String {
            var s:String = agentName.dataField;
            var v:String = item.s;
            return new XMLDocument(v).firstChild.nodeValue;
        }
  

Однако, когда я делаю это, я получаю сообщение об ошибке: не удается получить доступ к свойству или методу нулевой ссылки на объект.

Это отлично работает, когда я изменяю приведенный выше код следующим образом :

 protected function makeSpecialChars(item:Object,agentName:DataGridColumn):String {
            return new XMLDocument(item.computer_name).firstChild.nodeValue;
        }
  

где имя_компьютера — это поле данных этого столбца datagrid.

Размещение кода Datagrid :

 <components:DoubleClickDataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" 
                            xmlns:s="library://ns.adobe.com/flex/spark" 
                            xmlns:mx="library://ns.adobe.com/flex/mx" 
                            xmlns:components="components.*"
                            width="100%" height="100%"
                            editable="true" 
                            focusColor="#CEDA9B" 
                            rollOverColor="#CEDA9B" 
                            selectionColor="#84A207"
                            dataProvider="{invList}"
                            creationComplete="doubleclickdatagrid1_creationCompleteHandler(event)"
                            itemEditEnd="handleInventoryEdit(event)">
<components:columns>
    <mx:DataGridColumn width="120" dataField="computer_name" headerText="Computer Name" textAlign="center" labelFunction="makeSpecialChars"/>
    <mx:DataGridColumn dataField="path" headerText="Path" textAlign="center" labelFunction="makeSpecialChars"/>
    <mx:DataGridColumn width="110" dataField="computer_type" textAlign="center" headerText="Computer Type" />
    <mx:DataGridColumn width="180" dataField="username" headerText="Username" textAlign="center" />
    <mx:DataGridColumn width="90" dataField="ip_address" headerText="IP Address" textAlign="center" />
    <mx:DataGridColumn width="130" dataField="mac_address" headerText="MAC Address" textAlign="center" />
    <mx:DataGridColumn width="180" dataField="computer_model" headerText="Computer Model" textAlign="center" />
<mx:DataGridColumn width="70" editable="false" headerText="Actions" textAlign="center" itemRenderer="renderers.ActionRenderer" />
</components:columns>
  

На данный момент это работает нормально (применяется labelfunction только к 2 столбцам).. Но я хочу применить функцию label ко всем столбцам…

Ответ №1:

Попробуйте использовать следующее:

 protected function makeSpecialChars(item:Object,agentName:DataGridColumn):String {
            var s:String = agentName.dataField;
            var v:String = item[s];
            return new XMLDocument(v).firstChild.nodeValue;
        }
  

Комментарии:

1. да, я тоже это пробовал… Я получаю ту же ошибку .. фактически я начал так, но поскольку это не сработало, я попробовал с item.s .. безуспешно : (

2. В какой строке у вас NPE? Я прав, если это находится в return инструкции?

3. NPE?? мой код выглядит точно так, как вы его опубликовали. .. ничего не изменилось

4. Вы сказали, что у вас NPE (исключение нулевого указателя) «Не удается получить доступ к свойству или методу ссылки на нулевой объект». В какой строке это происходит?

5. Вы должны поместить точку останова в свою функцию label и увидеть реальное значение v . Есть ли у него первый ребенок и т.д.