Substitution Tokens in Resource Bundle Strings in Flex
Posted by brianr in flex, resource bundle on December 9th, 2010
There’s many times where you want to use a Resource Bundle String in-conjunction with variable data. People often breakup the RB String into 2 pieces like so:
part1=My name is
part2=and I like
And then put it back together in AS like:
var part1:String = ResourceManager.getInstance().getString('Labels', 'part1');
var name:String = "Brian Riley";
var part2:String = ResourceManager.getInstance().getString('Labels', 'part2');
var likes:String = "beer.";
var myStr:String = part1 + " " + name + " " + part2 + " " + likes;
Which works, but it’s a lot of unnecessary code. Take advantage of the tokens allowed in RBs and do the following:
likes=My name is {0} and I like {1}
var likes:String = ResourceManager.getInstance().getString('Labels', 'likes', ["Brian Riley", "beer."]);
The ResourceManager class will automatically substitue the tokens {0} and {1} in order and replace them with the array of strings provided as the last param in the getString() method.
Much simpler, right?
WASI @ MAX!
Posted by brianr in Uncategorized on October 22nd, 2010
Hit us up at MAX!
Brian Riley
617-480-0432
brianr@webappsolution.com
AIM/GIM/MSN/YIM/Twitter/Skype: wasibrianr
Tim McGee
508-566-6711
tim@webappsolution.com
AIM/GIM/YIM/MSN cheftimbob
Skype wasitim
Joe Seiter
201.981.2347
joes@webappsolution.com
YIM: seiter
AIM/GIM/Skype: wasijoes
Software List For New MacBook Pro Laptop
My partner and I just received our new MBPs and we’re pretty pumped about them — 17in, 8GB Ram, stateless HDs — very speedy. Startup is like 3 seconds, and I’m not kidding.
As we all know, getting a new computer is awesome, but it’s also a double edged sword…as my other partner Joe noted: “The worst thing about getting a new laptop is…well…getting a new laptop.” Sure the thing flies and all, but man there’s a good amount of hrs getting it ready for primetime development…think of all the little tools you’ve collected to make your laptop rock…
My partner and I have started to compile a live list of dev tools, goodies, IDEs,and whatevs we use on a regular basis and we thought we’d share — if you have others, please add to this list:
Basic Software & IDEs
- Eclipse Galileo R Packages or more specifically we use the Eclipse J2EE IDE
- Flash Builder — usually plug this into Eclipse
- Fireworks
- Flash
- Balsamiq
- MS Office
Connectivity & Tools
- Remote Desktop Connection Client for Mac 2
- Chicken of the VNC
- Cisco VPN Client
- MySQL Workbench
- Oracle SQL Developer
- Maven
IM & Social
Mac Flash Builder Plugin Install Error 6 + FIX
Posted by brianr in eclipse, flash builder, mac on October 8th, 2010
I just received my new 17in MBP so I pulled down a new version of Eclipse’s J2EE IDE and installed Flash Builder Plugin.
NOTE: You need to use the Eclipse Galileo Packages and the Carbon Install in order for this to work since FB is not compatible with the latets Eclipse build called Helio — here’s a link to the exact version of Eclipse that I used.
After a seemingly successful installation I received the following error code when starting up Eclipse: Error 6. I googled around a bit and found this link with this important tid-bit that fixed my issue:
- Reboot your Mac
- Navigate to your installation folder under /Adobe Flash Builder 4 Plug-in/install.support/AdobeFlashBuilderPluginSTIWrapperMac/
- Run Install.app from that location, to make sure all the required runtimes are installed successfully.
The restart seemed to do nothing, but running the installer did the trick. Good luck!
Flash Builder Network Monitor Project Property Causes HTTP Security Error
Posted by brianr in flash builder on October 6th, 2010
This sucker literally sucked up waaaay too many man hrs between my partner and myself trying to debug this issues, so I hope it saves someone else — for the short read, if you’ve used the Network Monitor in Flash Builder in a project make sure you open up .actionScriptProperties and set the property includeNetmonSwc = false.
includeNetmonSwc=”false”
For more of an explanation read the following — here’s the scenario:
We created an app that loads services.xml from within the same Java container as our SWF, so there’s no need for a crossdomain.xml file. The xml file was relative to the SWF and the HTML container for the SWF as such:
* main.html
* main.swf
* assets/service-locator/services.xml
In our local dev environments we have a Flex app that publishes itself to a Java app on Tomcat running in Eclipse with BlazeDS + Spring + Hibernate. Running locally, everything worked fine. When we deployed the WAR to a client’s remote Tomcat instance logged in via their VPN, my partner and I were able to hit the app and the XML file loaded fine. When the client tried, it failed and they received the following HTTPService Fault:
- faultCode = Channel.Security.Error
- faultDetail = Destination: DefaultHTTP
- faultString = Security error accessing url
This honestly baffled us for some time…why could we hit get the SWF to load the XML file when VPN’d in while the client received an error on their own network? After trying every security thing under the sun with the Flash Player, we simply created a new Flex project, put in a simple XML load via an HTTPService, and deployed it to the same WAR (as above with BlazeDS + Spring + Hibernate) and it worked for both us and them. Then we put the exact same Flex code from our original app into the test Flex app and again it worked for both us and out client…huh?
While it did work and we could just move on and fist pump the day away with out newfound success, we were obviously worried that something greater was at play and might come back to bite us in the ass. At this point we knew it was client code and not server code, so we decided to check the build properties and compiler options, etc, but it was all the same.
Finally we decided to do a compare on the project property files from the original project and the new one starting with .actionScriptProperties — and there it was, a simple flag difference of the property:
includeNetmonSwc=”true”
…and WHAM, it smacked me in the face.
Waaaaay back when we started this project I decided to play with the new Network Monitor (NM) integrated into Flash Builder. I used it maybe for 30 mins and said, ok, great…next. Well, this little flag apparently creates some settings (maybe opens ports or something) on dev machines that allows the NM to work like an HTTP Proxy/Sniffer similar to Charles or ServiceCapture…when this SWF is deployed to a server where these settings haven’t been set…well…you’re efffed. No dice. And you get the security error mentioned above.
Bottom line, make sure you either set the value to false:
includeNetmonSwc=”false”
or remove this sucker entirely. I really hope that helps someone as it cost us a ton of time. Thank you Adobe.
Flex & ActionScript Regex List
Posted by brianr in actionscript, flex, regex, tutorial on September 1st, 2010
I’m not great with regex since I don’t use it a ton so I constantly find myself looking up simple, reusable regex statements…thought I’d just start listing them as I use them in case someone else finds them useful. This will start with just a couple examples that we’ll continue to add to.
Assume the following vars:
var myString:String; var pattern:RegExp; var resultString:String; var isSuccess:Boolean;
Remove All Spaces
myString = "The quick brown fox."; pattern = /\s+/g; resultString = myString.replace(pattern, ""); trace(resultString); // Thequickbrownfox.
Remove Special Characters & Spaces
myString = "The 123 quick 456 brown !@#$% fox."; pattern = /\W/g; resultString = myString.replace(pattern, ""); trace(resultString); // The123quick456brownfox
Remove Special Characters & Numbers & Spaces
myString = "The 123 quick 456 brown !@#$% fox."; pattern = /[^a-zA-Z]+/g; resultString = myString.replace(pattern, ""); trace(resultString); // Thequickbrownfox
Test URL String
myString = "http://yahoo.com"; pattern = /^http(s)?:\/\/((\d+\.\d+\.\d+\.\d+)|(([\w-]+\.)+([a-z,A-Z][\w-]*)))(:[1-9][0-9]*)?(\/([\w-.\/:%+@&=]+[\w- .\/?:%+@&=]*)?)?(#(.*))?$/i; isSuccess = pattern.test(myString); trace(isSuccess); // true myString = "htt://yahoo.com"; isSuccess = pattern.test(myString); trace(isSuccess); // false
Trim String (With Tabs & Returns): Courtesy of Jeff Channel
myString = myString = "The quick brown fox. "; pattern = /^\s+|\s+$/gs; resultString = myString.replace(pattern, ""); trace(resultString); // "The quick brown fox."
Set Flex to Focus on Application Load
By default a Flex application is not in focus in the browser when it loads. This can be especially frustrating if you have say a login view and would like the username field to be in focus when the application starts cranking. However, with some simple JavaScript we can set the Flash object to focus when the application loads.
NOTE: This will not work in Safari, Chrome, or any other browser that leverages Webkit, as it doesn’t allow the focus to be set on embedded objects. If you’re targeting IE and Firefox the proposed solution below will work.
For example purposes, let’s assume we want to make our username TextInput field have focus when the Flex app starts rocking.
First, set the focus to the username field — assume a ViewMediator is doing this:
this.view.userNameTextInput.setFocus();
Create a simple JavaScript method to set the focus of the browser to your Flex application. Create this method in the index.template.html file in your Flex project — just drop it right before the closing HTML