Let's put all the layers together and make the handler talk to the model. I create different saving approaches, to showcase different integration techniques:
Copy coldbox create handler name=Contacts actions=index,newContact,create,save --open
Copy component{
// Dependency Injection
property name="contactService" inject="ContactService";
function index(event,rc,prc){
// Get all contacts
prc.aContacts = contactService.list();
event.setView("contacts/index");
}
function newContact(event,rc,prc){
event.setView("contacts/newContact");
}
function create(event,rc,prc){
var contact = populateModel( "Contact" );
// validate it
var vResults = validateModel( contact );
// Check it
if( vResults.hasErrors() ){
flash.put( "errors", vResults.getAllErrors() );
return newContact(event,rc,prc);
}
else{
flash.put( "notice", "Contact Created!" );
setNextEvent("contacts");
}
}
function save(event,rc,prc){
event.paramValue("contactID",0);
var contact = populateModel( contactService.get( rc.contactID ) );
// validate it
var vResults = validateModel( contact );
// Check it
if( vResults.hasErrors() ){
flash.put( "errors", vResults.getAllErrors() );
return newContact(event,rc,prc);
}
else{
flash.put( "notice", "Contact Saved!" );
setNextEvent("contacts");
}
}
}
Now that you have finished, go execute the contacts and interact with it.