I am trying to create a custom actionscript component that has an HTTPService property that I define in MXML and pass to the “service” property of a DatabaseNavigator component. However I keep getting null object errors. Here is my code:
index.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:db="database.containers.*" layout="absolute" width="700" height="700">
<mx:Style source="assets\css
scsadmin.css"></mx:Style>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.IndexChangedEvent;
import database.containers.DatabaseNavigator;
]]>
</mx:Script>
<mx:Fade id="fader" duration="1000" alphaFrom="1.0" alphaTo="0.0"/>
<mx:HTTPService id="databaseService" resultFormat="xml" method="POST" />
<db:DatabaseNavigator service="{databaseService}" host="localhost"/>
</mx:Application>
DatabaseNavigator.as
package database.containers
{
import mx.containers.TabNavigator;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
public class DatabaseNavigator extends TabNavigator
{
private var _host:String;
private var _username:String;
private var _password:String;
private var _database:String;
private var _service:HTTPService;
private var metaData:XMLList;
private var params:Object;
public function DatabaseNavigator()
{
super();
params = new Object();
addEventListener(FlexEvent.INITIALIZE, superInitHandler);
}
public function get host():String {
return _host;
}
public function set host(value:String):void {
_host = value;
}
public function get username():String {
return _username;
}
public function set username(value:String):void {
_username = value;
}
public function get password():String {
return _password;
}
public function set password(value:String):void {
_password = value;
}
public function get database():String {
return _database;
}
public function set database(value:String):void {
_database = value;
}
public function get service():HTTPService {
return _service;
}
public function set service(value:HTTPService):void {
_service = value;
}
private function superInitHandler(event:FlexEvent):void {
params.host = host;
params.username = username;
params.password = password;
params.database = database;
try {
if(!service) {
throw(new Error("Error: Databse service not specified"));
} else {
service.addEventListener(ResultEvent.RESULT, serviceResultHandler);
service.send(params);
}
} catch (error:Error) {
Alert.show(error.message);
}
}
private function serviceResultHandler(event:ResultEvent):void {
Alert.show(event.result.toString());
}
}
}