2015-12-15 16 views
3

Я использую объект mail() в cfscript. Я хочу расширить этот объект, чтобы я мог перезаписать метод setTo(). Вот код cfc, который я написал.Расширение почтового объекта в cfc

component extends="com.adobe.coldfusion.mail" 
{ 
    public void function setTo(String recipients) { 
    machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName(); 

    if (FindNoCase("devcomputer", machinename) == 0) 
    { 
     super.setTo(arguments.recipients); 
    } 
    else 
    { 
     super.setTo(this.getFrom()); 
    }  
    } 
} 

Когда это работает, однако, я получаю сообщение о том, метод Сетто() не существует на линии вызова super.setTo(). Копая дальше, я посмотрел на супер объект и наследует его от java.lang.Class, а не com.adobe.coldfusion.email.

Каков подходящий способ расширения почтового объекта ColdFusion, чтобы я мог переопределить метод setTo()?

ответ

3

Полупроводниковые приборы в com.adobe.coldfusion.mail на самом деле не являются функциями, а аксессуарами. Аксессоры автоматически генерируются ColdFusion на основе свойств компонента. Свойства наследуются, аксессоры - нет!

Аксессоры в компоненте почты ничего не делают, кроме как установить/получить значение свойства. Таким образом, эквивалент super.setTo(arguments.recipients); составляет variables.to = arguments.recipients;. Эквивалент this.getTo() является variables.to и т.д.

Примечание: Использование accessors="true" с компонентом, extends="com.adobe.coldfusion.mail" не работает с наследственными свойствами либо.

+1

Свойства наследуются, аксессоры не являются .. ~ _ ~ похоже на ошибку, не так ли? – Henry

+0

Зависит от перспективы, я думаю. Он разработан именно по этой причине. Ну, я бы не рекомендовал использовать свойство '(cf)', но это только я. – Alex

+0

Спасибо, Алекс. Это решило мою проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^