tag:blogger.com,1999:blog-88888418911569218702024-02-02T11:33:24.214-08:00Vroom FrameworkVroom Framework is a J2EE Web App Development Framework. It's a great mix of MVC and Ajax-enabled Event Driven Architecture. It provides fine grained HTML DOM binding with Server Side Java Code. You can develop a complete web application using Vroom only or if you want it can work in collaboration with Struts and JSF Frameworks and/or Yahoo UI library.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-8888841891156921870.post-32837007928980863402008-10-12T22:14:00.000-07:002008-10-12T22:22:45.360-07:00A quick fix to vroom.js replaceFirst and replaceAll functionsReplace the functions VroomUtils.replaceFirst(...) and VroomUtils.replaceAll(...) with following to improve the performance:<br /><pre><br />VroomUtils.replaceFirst = function (text, s, t) { <br /> if (text !== null && text.indexOf(s) !== -1) {<br /> text = text.replace(s, t);<br /> }<br /> return text;<br />};<br /><br />VroomUtils.replaceAll = function (text, s, t) {<br /> if (text !== null) {<br /> while(text.indexOf(s) !== -1) {<br /> text = text.replace(s, t);<br /> }<br /> }<br /> return text;<br />};<br /></pre>Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-67809856923716022242008-09-09T14:26:00.000-07:002008-09-10T02:36:50.142-07:00Localization using Vroom Web FrameworkIn this post I'll show you how easily you can localize your website using Vroom Framework. Not only it localizes the text but also control the page direction based on language.<br /><br />Step 1 - Let's start creating a Web Project named "VroomL10nApp" as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BrzMwcyW8wbFpQcIC00dl4M1vkrcu3wRGD2-CU9vCoSsQPhxZLdWM7pr4j4cvZvESb32padoLQnfvZHs6NCjUcr-cLgV702RRXOsStBDmnYet5v8odwbBNmzApSW-3u1iZdtT8sdcJU/s1600-h/1.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BrzMwcyW8wbFpQcIC00dl4M1vkrcu3wRGD2-CU9vCoSsQPhxZLdWM7pr4j4cvZvESb32padoLQnfvZHs6NCjUcr-cLgV702RRXOsStBDmnYet5v8odwbBNmzApSW-3u1iZdtT8sdcJU/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5244137196382761730" border="0" /></a><br /><br />Step 2 - Select either Apache Tomcat or GlassFish as Server and click Next!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigvOXlYv-nhIeW5R6-5F6AS9nHYffao9gDwo9g-y9C8-TQvLcq9yNZETle1idwduQvcbobvVHxpTmSJVyfbMDoUUv_sz5w8TrAG6nasPGQ3YAD4LKdhePs-G32BTEBH3Z_0KfDhXmqUDc/s1600-h/2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigvOXlYv-nhIeW5R6-5F6AS9nHYffao9gDwo9g-y9C8-TQvLcq9yNZETle1idwduQvcbobvVHxpTmSJVyfbMDoUUv_sz5w8TrAG6nasPGQ3YAD4LKdhePs-G32BTEBH3Z_0KfDhXmqUDc/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5244137201160689042" border="0" /></a><br /><br />Step 3 - Check Vroom Web Framework in the frameworks list and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgthm1E-U18TzgRwJCeI0Rjum-6OX7Zvc3aIKe5xAIFOYaVvE2G8a7wmsDS2X6yV2IAfVTm27cjKKwz4B7guppVY8yXMSs5Sq8LX2vfBUEIyRnMjUYEPSRqoRiR0dko-nyYFVadkLEQV1g/s1600-h/3.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgthm1E-U18TzgRwJCeI0Rjum-6OX7Zvc3aIKe5xAIFOYaVvE2G8a7wmsDS2X6yV2IAfVTm27cjKKwz4B7guppVY8yXMSs5Sq8LX2vfBUEIyRnMjUYEPSRqoRiR0dko-nyYFVadkLEQV1g/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5244137204038223842" border="0" /></a><br /><br />Step 4 - Create a jsp page named "login.jsp" as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJvlOTUNns7mp763ZT39tFL3wNa8JK5HyLNUD3QnsTfUU7aSxbGiX67QBjEb1ryElMFq8fU-CGBgdP17G1NQ_CDYMdvC1LpKkC6-1EWv0Ym3imG9H5Oqmvqk1oe9WHFZkviWMOYklxDaE/s1600-h/4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJvlOTUNns7mp763ZT39tFL3wNa8JK5HyLNUD3QnsTfUU7aSxbGiX67QBjEb1ryElMFq8fU-CGBgdP17G1NQ_CDYMdvC1LpKkC6-1EWv0Ym3imG9H5Oqmvqk1oe9WHFZkviWMOYklxDaE/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5244137209760410770" border="0" /></a><br /><br />Step 5 - Add following code to login.jsp:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuap7zEHOhVp0vhBEKyFuXlLXz9Owd3FzED47BL90JvQr-u406YcMb261ZcEgLXAssNmbQhayPFp0pEqKgHG6NMkbNDN_P2WxUpVRtQdHcB_48LdJUZBzF2gIF1JbSHHY37DMWNY3n9Og/s1600-h/6.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuap7zEHOhVp0vhBEKyFuXlLXz9Owd3FzED47BL90JvQr-u406YcMb261ZcEgLXAssNmbQhayPFp0pEqKgHG6NMkbNDN_P2WxUpVRtQdHcB_48LdJUZBzF2gIF1JbSHHY37DMWNY3n9Og/s320/6.png" alt="" id="BLOGGER_PHOTO_ID_5244138641492357010" border="0" /></a><br /><br />Step 7 - Debug/Run the application and you'll see the following page:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuJ_iBObnTChqNBSle8VFGNXLFnkTzaz2NxNuwMOYEu__exQwwVcnEsrsZ5siXeU5wC5lwcx70vvUyeQWYaGHYITLbGM6LLGubJRX98kJYctJ9TAlRGIP3VbXKanUn-EfN5Pc3IUe5xY4/s1600-h/11-login.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuJ_iBObnTChqNBSle8VFGNXLFnkTzaz2NxNuwMOYEu__exQwwVcnEsrsZ5siXeU5wC5lwcx70vvUyeQWYaGHYITLbGM6LLGubJRX98kJYctJ9TAlRGIP3VbXKanUn-EfN5Pc3IUe5xY4/s320/11-login.png" alt="" id="BLOGGER_PHOTO_ID_5244193540728333746" border="0" /></a><br /><br />Step 8 - Add following definitions to vroom-config.xml file:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSG0vSGjtXkqgtw6qHJSEja4NWvMyaDGm_ch8bPktva6YhuXYCPcSD69H3wR5R_M37L7y0NUAnP8kCZXE2ZKVBZr4mOM-R5_hf53u5CmyK2V2Guph5myrWUzoiyGD4KHIUqwKtGiSH2F0/s1600-h/7.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSG0vSGjtXkqgtw6qHJSEja4NWvMyaDGm_ch8bPktva6YhuXYCPcSD69H3wR5R_M37L7y0NUAnP8kCZXE2ZKVBZr4mOM-R5_hf53u5CmyK2V2Guph5myrWUzoiyGD4KHIUqwKtGiSH2F0/s320/7.png" alt="" id="BLOGGER_PHOTO_ID_5244138648238347794" border="0" /></a><br />The first definition in vroom-config.xml tells the framework to update contents on all the pages as per call elements on page load. Right now the value of all the call elements is static.<br /><br />Step 9 - Add a java class named "ApplicationBean" as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59jVOIodwH1DFllYJUiuhaKy5xpANSNeGWU9QnJO4haeC5kmqZHDK97Y_Sr6SCkDW36PDNqMbtIqeByu5M4CA6lIg6J6HqG_yrzVtMNKoy3qfQc1foZisNpZHKtnr2PV0C1mXKRTki3Y/s1600-h/8.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59jVOIodwH1DFllYJUiuhaKy5xpANSNeGWU9QnJO4haeC5kmqZHDK97Y_Sr6SCkDW36PDNqMbtIqeByu5M4CA6lIg6J6HqG_yrzVtMNKoy3qfQc1foZisNpZHKtnr2PV0C1mXKRTki3Y/s320/8.png" alt="" id="BLOGGER_PHOTO_ID_5244138649065032274" border="0" /></a><br /><br />Step 10 - Add a resource bundle named "Bundle" as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijLdQE-jVd6jwdiqAG_FMROlzVGX-g67kIGR5PkiuCMQLcUuiM1nW3JSk516AC7CGur5KM_FfDxGEf_l_AbABHER4Teu37QsUuVVdWKrpM4GextcH8W-cyn78y6CibKWRusFtDmfVkBwo/s1600-h/9.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijLdQE-jVd6jwdiqAG_FMROlzVGX-g67kIGR5PkiuCMQLcUuiM1nW3JSk516AC7CGur5KM_FfDxGEf_l_AbABHER4Teu37QsUuVVdWKrpM4GextcH8W-cyn78y6CibKWRusFtDmfVkBwo/s320/9.png" alt="" id="BLOGGER_PHOTO_ID_5244138649498149474" border="0" /></a><br /><br />Step 11 - Add your favorite locale to the resource bundle by selecting "Add Locale..." from the context menu of Bundle.properties file node in the project tree and click OK!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6KLLqXz77_rWvoSWzUPMzSwzvwmM2N8zSDvbs2gkvwEgKNh_XCbqU0kcvheK5iAjjYW39UqnxZWoZ8_46adyEmFUSUuvYuTgi4-qF5FervpEWPP6BHrSWHWPebS26s1AZpDvKddq2mik/s1600-h/10.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6KLLqXz77_rWvoSWzUPMzSwzvwmM2N8zSDvbs2gkvwEgKNh_XCbqU0kcvheK5iAjjYW39UqnxZWoZ8_46adyEmFUSUuvYuTgi4-qF5FervpEWPP6BHrSWHWPebS26s1AZpDvKddq2mik/s320/10.png" alt="" id="BLOGGER_PHOTO_ID_5244138656039154050" border="0" /></a><br />I've chosen Arabic because arabic language flows from right to left and in this post we'll see how direction can be controlled using the framework.<br /><br />Step 12 - Open the Resource Editor by selecting "Open" from the context menu of the Bundle.properties node and add following resources:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWt68AATluJXjhyphenhyphen9w10w0v7TOTtqn0yYeQFpq2ahb4iUHY1Ma67k7oc7_7Bf73UKxqGYK2WdW6XFjiOSLoD5cMe-aMJxTH6eK0cN-GhEoZ05CkK_nP5w76mTxTYRY5qI1xZgjfaOJWCT0/s1600-h/12.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWt68AATluJXjhyphenhyphen9w10w0v7TOTtqn0yYeQFpq2ahb4iUHY1Ma67k7oc7_7Bf73UKxqGYK2WdW6XFjiOSLoD5cMe-aMJxTH6eK0cN-GhEoZ05CkK_nP5w76mTxTYRY5qI1xZgjfaOJWCT0/s320/12.png" alt="" id="BLOGGER_PHOTO_ID_5244194840111426818" border="0" /></a><br /><br />Step 13 - Add a method named "getBundle" to ApplicationBean.java as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXpx_mXjS6EckTiCkcWN8VoZN5dkX9kvcW_zXhChrqgOYg_GEOrnlAKIP20_Yy8NWFkA3olEiyyOwSNyau-5NmEmquEsPnfySCCmi41eZf0BWhHHAwUFUdlzt4ht-dQyKfs2G54LBdn3U/s1600-h/15.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXpx_mXjS6EckTiCkcWN8VoZN5dkX9kvcW_zXhChrqgOYg_GEOrnlAKIP20_Yy8NWFkA3olEiyyOwSNyau-5NmEmquEsPnfySCCmi41eZf0BWhHHAwUFUdlzt4ht-dQyKfs2G54LBdn3U/s320/15.png" alt="" id="BLOGGER_PHOTO_ID_5244194845974669634" border="0" /></a><br /><br />Step 14 - Replace the definition in vroom-config.xml as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsTrhE2RNmpHDzx2yzdt0U1bP4JxgMZ5jkFtpfsIvxekboP6RUaZjoBd362uPhynNtLyn2OBwfgHCU9XHfUuHwP6_fkeM3QitHAYoz8DEDEk3Vn6FFWIMJZ9Aq6mDWrny6IQyiSbFZvno/s1600-h/16.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsTrhE2RNmpHDzx2yzdt0U1bP4JxgMZ5jkFtpfsIvxekboP6RUaZjoBd362uPhynNtLyn2OBwfgHCU9XHfUuHwP6_fkeM3QitHAYoz8DEDEk3Vn6FFWIMJZ9Aq6mDWrny6IQyiSbFZvno/s320/16.png" alt="" id="BLOGGER_PHOTO_ID_5244194852660667714" border="0" /></a><br />If you notice we've changed the static values with #{key} where key is the key of the property available in resource bundle. We also added bean-class and method attributes for onload event. If the var and scope is not specified, the framework create an instance of the bean-class in the application scope using bean-class as variable name as well.<br /><br />Step 15 - Debug/Run the application page and you'll see the login page as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuJ_iBObnTChqNBSle8VFGNXLFnkTzaz2NxNuwMOYEu__exQwwVcnEsrsZ5siXeU5wC5lwcx70vvUyeQWYaGHYITLbGM6LLGubJRX98kJYctJ9TAlRGIP3VbXKanUn-EfN5Pc3IUe5xY4/s1600-h/11-login.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuJ_iBObnTChqNBSle8VFGNXLFnkTzaz2NxNuwMOYEu__exQwwVcnEsrsZ5siXeU5wC5lwcx70vvUyeQWYaGHYITLbGM6LLGubJRX98kJYctJ9TAlRGIP3VbXKanUn-EfN5Pc3IUe5xY4/s320/11-login.png" alt="" id="BLOGGER_PHOTO_ID_5244193540728333746" border="0" /></a><br />You may not feel the difference in this login page and the previous login page. But we'll see it once we switch the other locale we added previous to the resource bundle. In my case it's arabic.<br /><br />Step 16 - To add and switch to the desired locale, open the browser options and locate language preferences. I'm using FireFox 3 on linux so "Edit -> Preferences" will open the browser preferences. Choose "Content" tab and click "Languages" button. You'll see the following options as follows, add your desired locale by clicking "Select a language to add..." button and move the added locale to first position by clicking "Move Up" button.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-ua2UT9Lieqs4ztiUqNmVLLfc60dyxzQgQLONIeMYDTJ83vdgZLUUZ23c6xb4HxqU7XxpxCOA7woYbsbbHDaHszHLnCEpgGbWsp3oQxHPlOJa5uWT2hB0c2HOvjy7foh_ENSMscqMss/s1600-h/13.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-ua2UT9Lieqs4ztiUqNmVLLfc60dyxzQgQLONIeMYDTJ83vdgZLUUZ23c6xb4HxqU7XxpxCOA7woYbsbbHDaHszHLnCEpgGbWsp3oQxHPlOJa5uWT2hB0c2HOvjy7foh_ENSMscqMss/s320/13.png" alt="" id="BLOGGER_PHOTO_ID_5244194840594729602" border="0" /></a><br /><br />Step 17 - Refresh the browser page by pressing Ctrl+F5 and you'll see a different login screen based on the locale selected:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqcpkarqaM_U995wQRDeNWD3xPc1S9uu6g8sJi_qLYgi1ziA8WkWziPMX-PBcGaxS5vmctUBxeMNBSDbfisgol12TZBpjxvwsUWjdoQRIXTBd-XkTVhNkqMGi6x7eCH_pYF-cHuV_YCVs/s1600-h/18-login-arabic.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqcpkarqaM_U995wQRDeNWD3xPc1S9uu6g8sJi_qLYgi1ziA8WkWziPMX-PBcGaxS5vmctUBxeMNBSDbfisgol12TZBpjxvwsUWjdoQRIXTBd-XkTVhNkqMGi6x7eCH_pYF-cHuV_YCVs/s320/18-login-arabic.png" alt="" id="BLOGGER_PHOTO_ID_5244199431935423906" border="0" /></a><br />Note that the direction is automatically changed from ltr to rtl, which is defined in the resource bundle as "direction" property.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-67631876223548097162008-09-04T11:12:00.001-07:002008-09-05T16:15:56.048-07:00EJBs, YUI DataTable and JavaScript using Vroom Web FrameworkOkay! No more advertisements for Vroom Web Framework. This time, I'll show you how easily you can build Web Applications using EJBs, Yahoo UI and Vroom Plugin 1.1.0 for NetBeans IDE 6.1.<br /><br />Step 1 - Create a new Project and select Enterprise Application under Enterprise Category:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IokUxRXyvmgnITVvHp033F-Z4g6zykLsGlyMkzFSvuKVOkuCz50YsGCuXnDX_Z4W_osteHaK3a6AKLvSlVNjWsK1vkdszsW18C2Js3ntqLZKlqvBNhlZxYfaxcxVep5rBeo6kcgV9JA/s1600-h/2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IokUxRXyvmgnITVvHp033F-Z4g6zykLsGlyMkzFSvuKVOkuCz50YsGCuXnDX_Z4W_osteHaK3a6AKLvSlVNjWsK1vkdszsW18C2Js3ntqLZKlqvBNhlZxYfaxcxVep5rBeo6kcgV9JA/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5242231188775206034" border="0" /></a><br /><br />Step 2 - Enter the Project Name "DemoApp" and click Next!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNJRw5FEXE74UYr1bxumCMWyTzrmV2p1BrO_uaCzu2otCIolTQiNs7RNWwd9-_v0ZHMplnBOwwrt6p34ZgYkn94M9_BOSbSdqzzlzGxu5EdqYp2ePUr7UYwhOKV04nLtwie9_eCCWbeWs/s1600-h/3.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNJRw5FEXE74UYr1bxumCMWyTzrmV2p1BrO_uaCzu2otCIolTQiNs7RNWwd9-_v0ZHMplnBOwwrt6p34ZgYkn94M9_BOSbSdqzzlzGxu5EdqYp2ePUr7UYwhOKV04nLtwie9_eCCWbeWs/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5242231192086510370" border="0" /></a><br /><br />Step 3 - Uncheck Create Web Application Module CheckBox and Click Finish! We'll build Web Application separately.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDRR2Xiz8L-k3vsetxHLAFpB1xGnyB9vjNtePz_xoDU4K_mBI-akZ_oLey-e7DgNRrFjxEpU8sg1LlUnnCJkMs-5An2bVb-S-pU-LDolaF9NWur6LORVlQdQ8G-9rJC9jDh3rQYw7nos/s1600-h/4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDRR2Xiz8L-k3vsetxHLAFpB1xGnyB9vjNtePz_xoDU4K_mBI-akZ_oLey-e7DgNRrFjxEpU8sg1LlUnnCJkMs-5An2bVb-S-pU-LDolaF9NWur6LORVlQdQ8G-9rJC9jDh3rQYw7nos/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5242231189523815810" border="0" /></a><br /><br />Step 4 - Create Entity Classes from Database using jdbc/sample database in DemoApp-ejb project.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEpTKHPgmJPzFI1U7Z5lnlqHvFTie2BwahgurW2dpIh-Zoim3ruVqiz7BiU1N_WgCJqsNtFzdQVKjFQA0kIGko-Axz3FfAu6N8Hga-Z4uLQBoUhmRiZpR87WQrSslOD3r3w3hIpNpj-w0/s1600-h/6.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEpTKHPgmJPzFI1U7Z5lnlqHvFTie2BwahgurW2dpIh-Zoim3ruVqiz7BiU1N_WgCJqsNtFzdQVKjFQA0kIGko-Axz3FfAu6N8Hga-Z4uLQBoUhmRiZpR87WQrSslOD3r3w3hIpNpj-w0/s320/6.png" alt="" id="BLOGGER_PHOTO_ID_5242231196421165122" border="0" /></a><br /><br />Step 5 - Create a Persistence Unit named "DemoApp-ejbPU" for jdbc/sample data source.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkgZMjTpMFZraiN-jleRbJ5qhuWU7mF7vane7iRJpPtDAMdK5JpqJr-F4e1N3tuZ_17qNI1BdzTQ9p50aDlpT4I_psTteG_aO-LuQRni03Ylunrwz4vx8UkVonZXRlv7KIWToB8fM1adw/s1600-h/7.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkgZMjTpMFZraiN-jleRbJ5qhuWU7mF7vane7iRJpPtDAMdK5JpqJr-F4e1N3tuZ_17qNI1BdzTQ9p50aDlpT4I_psTteG_aO-LuQRni03Ylunrwz4vx8UkVonZXRlv7KIWToB8fM1adw/s320/7.png" alt="" id="BLOGGER_PHOTO_ID_5242231195503853106" border="0" /></a><br /><br />Step 6 - Keep the Class Names as is, enter "com.myco.demo.entity" in Package field and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsxRzfYZB6pngJdfCIdNME46CGW9ZcFGqnuMIApoED1Nkj8EhN7wNmygUDruPiMi6JhD-ojMRt94OANUNJXBgO4D7R0eipf81RB9Ij0RJVJaXeaCWGsqvqy1sdbADK2y69oxiv9_4bVvM/s1600-h/8.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsxRzfYZB6pngJdfCIdNME46CGW9ZcFGqnuMIApoED1Nkj8EhN7wNmygUDruPiMi6JhD-ojMRt94OANUNJXBgO4D7R0eipf81RB9Ij0RJVJaXeaCWGsqvqy1sdbADK2y69oxiv9_4bVvM/s320/8.png" alt="" id="BLOGGER_PHOTO_ID_5242234012664368738" border="0" /></a><br /><br />Step 7 - Create a SessionBean named "CustomerSession", enter "com.myco.demo.session" in Package field, check Remote check box, uncheck Local check box and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7oMhRljy4tfMCKqW5UqRkCZ6FDiLQdeggWmr9iNSfqurEpxsyfK3YzJUWobNTUY3Qm2OpfdoWpz68_7U6aMVTa9tIAIXKTsgvJ5iJmWGnYFIlTNGm_s5veiJL8iDydfEjAQRdxVD1ik/s1600-h/9.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7oMhRljy4tfMCKqW5UqRkCZ6FDiLQdeggWmr9iNSfqurEpxsyfK3YzJUWobNTUY3Qm2OpfdoWpz68_7U6aMVTa9tIAIXKTsgvJ5iJmWGnYFIlTNGm_s5veiJL8iDydfEjAQRdxVD1ik/s320/9.png" alt="" id="BLOGGER_PHOTO_ID_5242234011983879426" border="0" /></a><br /><br />Step 8 - While being inside CustomerSessionBean.java file, select EJB Methods/Add Business Method... from the context menu to add a business method. Enter "getCustomers" in the Name field and "java.util.List" in Return Type Field. Add Parameter "name" of type "java.lang.String" and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRhqVESCqxdvMbnuhrsDG146faSHQ0JzXB0gY2mqS7VrJfFwqjFSdJa7zkbhMnqv_3nC6bMmoALgrUq9cAHSJ20L6FzmpOh85jN9-byLfkEOtfmCJ_45K5NP6AmZbbeKXDAt7d0tRNWeI/s1600-h/10.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRhqVESCqxdvMbnuhrsDG146faSHQ0JzXB0gY2mqS7VrJfFwqjFSdJa7zkbhMnqv_3nC6bMmoALgrUq9cAHSJ20L6FzmpOh85jN9-byLfkEOtfmCJ_45K5NP6AmZbbeKXDAt7d0tRNWeI/s320/10.png" alt="" id="BLOGGER_PHOTO_ID_5242234017840515746" border="0" /></a><br /><br />Step 9 - The CustomerSessionBean.java should look like as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitNDphpYMwmjy25eMWAktwmkOihxH_Nme-DjmxsylcSok7br4issAz29H2qzTWnQWKUoQfCxANfl4nzXjVE3xgzNZT7K0TyZvIAeb4G_ukm2LPKvufwaxw8D8ibVtObLdnmc9r-bELqj8/s1600-h/11.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitNDphpYMwmjy25eMWAktwmkOihxH_Nme-DjmxsylcSok7br4issAz29H2qzTWnQWKUoQfCxANfl4nzXjVE3xgzNZT7K0TyZvIAeb4G_ukm2LPKvufwaxw8D8ibVtObLdnmc9r-bELqj8/s320/11.png" alt="" id="BLOGGER_PHOTO_ID_5242243171966168754" border="0" /></a><br /><br />Step 10 - One small change we'll make to the Named Query "Customer.findByName" as follows:<br /><pre><br />@NamedQuery(name = "Customer.findByName", query = "SELECT c FROM Customer c<br />WHERE LOWER(c.name) LIKE :name")<br /></pre><br />At this stage or EJB is ready as per our requirement. Now we'll create a web application which will use this CustomerSessionBean to get customers list and display it in Yahoo UI DataTable.<br /><br />Step 1 - Create a Web Application named "DemoApp-war" and click Next!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bsWiX0k7Emfuddinn6DjyrOqlDG7QGnir-hdn3WsxVltizOQOfYlvn-_VM5pGI5zKq6aNKMMS-r20VbzJBvDGkdft1tSrgwImG7OY-Bo2gPZ1RTX-bSr-USH_jzPYm9TMp1Ccaz_-_s/s1600-h/2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bsWiX0k7Emfuddinn6DjyrOqlDG7QGnir-hdn3WsxVltizOQOfYlvn-_VM5pGI5zKq6aNKMMS-r20VbzJBvDGkdft1tSrgwImG7OY-Bo2gPZ1RTX-bSr-USH_jzPYm9TMp1Ccaz_-_s/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5242244918188353826" border="0" /></a><br /><br />Step 2 - Make sure you don't include the application to the DemoApp Enterprise Application. Select GlassFish from the server list and click Next!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWLmEkCyBXgt_RbrvB6J7bTPQpnot9si7Mi1WN_TIOr-7GdZ-xqmh-XaT3lf01cewxwpUCrRuoRXdwS8c84cuEDYBpXDYpAztmjAZYbGwSstUO2IjFNpXZPc5XfYr3xhegWFPPWa0duQ/s1600-h/3.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWLmEkCyBXgt_RbrvB6J7bTPQpnot9si7Mi1WN_TIOr-7GdZ-xqmh-XaT3lf01cewxwpUCrRuoRXdwS8c84cuEDYBpXDYpAztmjAZYbGwSstUO2IjFNpXZPc5XfYr3xhegWFPPWa0duQ/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5242244920739759842" border="0" /></a><br /><br />Step 3 - Check Vroom Web Framework from the Frameworks, leave the properties of the framework unchanged and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiac-1xAaSv8B9OAzXpsmr_A8l7Z_VOShSn6J1pYiVpMfzIG1G4YREI6pA3w-1jRp2IoR7q26FZsM_XgFIKrES3iY1zdS8T6WmV1tO2H0wB8BRKWE4tF5EYS0bftglFSB5rkzHrHcUWsLs/s1600-h/4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiac-1xAaSv8B9OAzXpsmr_A8l7Z_VOShSn6J1pYiVpMfzIG1G4YREI6pA3w-1jRp2IoR7q26FZsM_XgFIKrES3iY1zdS8T6WmV1tO2H0wB8BRKWE4tF5EYS0bftglFSB5rkzHrHcUWsLs/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5242244922440937074" border="0" /></a><br /><br />Step 4 - Change the HTML code of index.jsp as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnLEnwgUa744HOJgnYfW37F3uQc-8EF5AONEgp8VCMk5DmtD0qyM6cFiXGM7TDm3nn93xwFxdccnidcPSG-7eBJFoAZOoq65YbUB5mWsCpsnIP_lxajUkSr9jGpZvTG1ZtV66o9NwFb0M/s1600-h/5.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnLEnwgUa744HOJgnYfW37F3uQc-8EF5AONEgp8VCMk5DmtD0qyM6cFiXGM7TDm3nn93xwFxdccnidcPSG-7eBJFoAZOoq65YbUB5mWsCpsnIP_lxajUkSr9jGpZvTG1ZtV66o9NwFb0M/s320/5.png" alt="" id="BLOGGER_PHOTO_ID_5242244925747073762" border="0" /></a><br /><br />Step 5 - In vroom-config.xml file, remove the default web page definition and add webpage definition for index.jsp as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifYpopRYnhJ9KFDMpk4_Zu8rMKyPujo4E1ziIG9aUse1jUheqM1-ENg5hmIOOhff7lt7ATI9IPAnVHUwYblXWmHL9mnvTNy1FvB6v8sRa78Mq_Qc5Wo_6p5w8G8HXnsxTAHtIuu_2Q8B0/s1600-h/15.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifYpopRYnhJ9KFDMpk4_Zu8rMKyPujo4E1ziIG9aUse1jUheqM1-ENg5hmIOOhff7lt7ATI9IPAnVHUwYblXWmHL9mnvTNy1FvB6v8sRa78Mq_Qc5Wo_6p5w8G8HXnsxTAHtIuu_2Q8B0/s320/15.png" alt="" id="BLOGGER_PHOTO_ID_5242246654619446258" border="0" /></a><br /><br />Step 6 - Debug the web application and you'll see the following webpage in the browser:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZtWH0tueCbr5c99fWv62TVMBNjhQqAPdgGKrgq8Lt16pvDi8-EzcFx3_VNwowKpDdQdHsWbl3DXMfi8fsQI-ay4RhmgDwjk4IeYD-OyiJqXBoYU5qcQ9dpd6e-q9bxZJgn2At8hTAe8c/s1600-h/6.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZtWH0tueCbr5c99fWv62TVMBNjhQqAPdgGKrgq8Lt16pvDi8-EzcFx3_VNwowKpDdQdHsWbl3DXMfi8fsQI-ay4RhmgDwjk4IeYD-OyiJqXBoYU5qcQ9dpd6e-q9bxZJgn2At8hTAe8c/s320/6.png" alt="" id="BLOGGER_PHOTO_ID_5242244931232560994" border="0" /></a><br /><br />Step 7 - Now, in vroom-config.xml, modify the definition for index.jsp as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO4aT3ZNvFEWa3X3c1RO46D4tNM1fbaHy4TwCtL2i3BEzO2NsZfhRYi9qpWqsEDLOjEsXgF5rE0DN0RPSPPZNBVbXIsyNDNv5wCTcR_S6cpNWBqgUGz4yGrNXLH924cdAyrgicyUrXmyc/s1600-h/9.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO4aT3ZNvFEWa3X3c1RO46D4tNM1fbaHy4TwCtL2i3BEzO2NsZfhRYi9qpWqsEDLOjEsXgF5rE0DN0RPSPPZNBVbXIsyNDNv5wCTcR_S6cpNWBqgUGz4yGrNXLH924cdAyrgicyUrXmyc/s320/9.png" alt="" id="BLOGGER_PHOTO_ID_5242248769074736130" border="0" /></a><br /><br />Step 8 - Debug the application and click "Search" button, you'll see the message "Search Button Clicked".<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLoEEhyphenhyphenWgO5i2dfi-HmP7PW9P3Zdubc-5TbZPZQRXSIZ7DdhMJhKGm4nxVgUjpjsXlPkJAhGx6O5QGp5k3dTv9Pm8pIPCcy6O-4QqlIJc7YdAK8XlPlGYLkZkv4vWI4LHlDIbgl_3bCd4/s1600-h/10.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLoEEhyphenhyphenWgO5i2dfi-HmP7PW9P3Zdubc-5TbZPZQRXSIZ7DdhMJhKGm4nxVgUjpjsXlPkJAhGx6O5QGp5k3dTv9Pm8pIPCcy6O-4QqlIJc7YdAK8XlPlGYLkZkv4vWI4LHlDIbgl_3bCd4/s320/10.png" alt="" id="BLOGGER_PHOTO_ID_5242248773148498066" border="0" /></a><br /><br />Step 9 - Create a javascript file named "customer-search-btnSearch-onclick.js" under "web/scripts" folder.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_wLFCiWCn_TH5dNoE-ZddgrNe-B08AoMaowKArYBOa7Wc85M61v8Ih1RwcIKkIKttvhexQATcb1u6MZWxZpePVwYD5sm1hgqyyi5EBiausiL9jsym53lHpfU9mRwhoQdeSoPLrxdbybQ/s1600-h/11.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_wLFCiWCn_TH5dNoE-ZddgrNe-B08AoMaowKArYBOa7Wc85M61v8Ih1RwcIKkIKttvhexQATcb1u6MZWxZpePVwYD5sm1hgqyyi5EBiausiL9jsym53lHpfU9mRwhoQdeSoPLrxdbybQ/s320/11.png" alt="" id="BLOGGER_PHOTO_ID_5242248780988637874" border="0" /></a><br /><br />Step 10 - Edit the javascript file and add following code:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitVpeCNQPf6kF0_EQs6O2f5_NW7hnQ5WEStC4_HQm_eoiTSDhWBt3ScG7PoeAy2XNXMhdz7BGSXdVB4o8nrwU7vlktYjgQ6J0EUicv64orgKANZ8Tyik8l-aFhsFKDvASHZc7HWiZCUZs/s1600-h/13.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitVpeCNQPf6kF0_EQs6O2f5_NW7hnQ5WEStC4_HQm_eoiTSDhWBt3ScG7PoeAy2XNXMhdz7BGSXdVB4o8nrwU7vlktYjgQ6J0EUicv64orgKANZ8Tyik8l-aFhsFKDvASHZc7HWiZCUZs/s320/13.png" alt="" id="BLOGGER_PHOTO_ID_5242248787536728642" border="0" /></a><br /><br />Step 11 - In vroom-config.xml, change the index.jsp definition as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_sKlt8qsIfFybGNi0LiqGhr3-g6Durh8ttPTLg1AmprbXhcTBiFzemTYc_V1hhkaOIVD4g0Ef6DTN6Q-z40S6kKPad1DbjTab0fpLFnOdJdIMzIhhTv5b8VdupVii3oBSQFN3iBm8mrI/s1600-h/12.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_sKlt8qsIfFybGNi0LiqGhr3-g6Durh8ttPTLg1AmprbXhcTBiFzemTYc_V1hhkaOIVD4g0Ef6DTN6Q-z40S6kKPad1DbjTab0fpLFnOdJdIMzIhhTv5b8VdupVii3oBSQFN3iBm8mrI/s320/12.png" alt="" id="BLOGGER_PHOTO_ID_5242248783778918370" border="0" /></a><br /><br />Step 12 - Debug the application and click "Search" button. This time you'll see the alert that was placed in customer-search-btnSearch-onclick.js file.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjghle7QBGlb6OLJXRYrxd-un-6-DbnIJ54rk27q8-XUsdJHDjiQ1DIfY-7UdDFrpRbnBQQGIghyaaRyofBeTcE68eWs4EBxhR9nk7jKe47YzvkSWCtx0fVndlt_st6L6puiGGHG4vskb4/s1600-h/14.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjghle7QBGlb6OLJXRYrxd-un-6-DbnIJ54rk27q8-XUsdJHDjiQ1DIfY-7UdDFrpRbnBQQGIghyaaRyofBeTcE68eWs4EBxhR9nk7jKe47YzvkSWCtx0fVndlt_st6L6puiGGHG4vskb4/s320/14.png" alt="" id="BLOGGER_PHOTO_ID_5242679803679750626" border="0" /></a><br /><br />Vroom Web Framework is very powerful because it provides you flexibility to attach javascript files to every single event. These javascripts are not ordinary scripts, these have access to server methods implicitly and you're not required to include them in the webpage head tag.<br /><br />Now we are going to create a Java file which we'll access in the javascript file we just created:<br /><br />Step 1 - Create a Java class named "DatabaseBean". Enter "com.myco.demo.bean" in the Package field and click Finish!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiihx5kx_GSzRQtJDFJFSVw1mt5xRacaTpz_KJaGlUEn8RWP9F7uNO_00k2eLYYUDs5jd8qyuYjfeBeMyc38PHwDd2cS4rn7GzH0w7PQ5O8ly0LMhyphenhyphenTys2FttY4652_GemArqTcyLEm1z4/s1600-h/1.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiihx5kx_GSzRQtJDFJFSVw1mt5xRacaTpz_KJaGlUEn8RWP9F7uNO_00k2eLYYUDs5jd8qyuYjfeBeMyc38PHwDd2cS4rn7GzH0w7PQ5O8ly0LMhyphenhyphenTys2FttY4652_GemArqTcyLEm1z4/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5242256756698868370" border="0" /></a><br /><br />Step 2 - While being in the DatabaseBean.java, select Enterprise Resources/Call Enterprise Bean... from the context menu, select CustomerSessionBean in the list and click OK!<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpSszl-XU44z9uzRg5vD45ixVczZqWkRWMvSU2lsaUahKRWoX0FovKYQIhFkQoqdXCKqx8KPsu1rS_I8xWRdDjodi7zDjhJebDujHF1D93-X0gXXh6R8sXoPGk6W8ZpErKYUxwOHcVlo/s1600-h/2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpSszl-XU44z9uzRg5vD45ixVczZqWkRWMvSU2lsaUahKRWoX0FovKYQIhFkQoqdXCKqx8KPsu1rS_I8xWRdDjodi7zDjhJebDujHF1D93-X0gXXh6R8sXoPGk6W8ZpErKYUxwOHcVlo/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5242256753524157762" border="0" /></a><br /><br />Step 3 - Add a method in DatabaseBean named "getCustomers". The code of the DatabaseBean.java should look like as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL1x2ImyLSD4iKPxmJwOSKrDHpENle84V9nH_mgaLFxm0bFjU17CXpLyc6G-D8lF2pTtn5t3jsxpI-ktpcwDAzL0H8s6T1ZIq3hMhSIpC4GtIFI42-MlCVJtTft9nfc3ZL6HepZUIz-IE/s1600-h/3.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL1x2ImyLSD4iKPxmJwOSKrDHpENle84V9nH_mgaLFxm0bFjU17CXpLyc6G-D8lF2pTtn5t3jsxpI-ktpcwDAzL0H8s6T1ZIq3hMhSIpC4GtIFI42-MlCVJtTft9nfc3ZL6HepZUIz-IE/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5242256759939544850" border="0" /></a><br /><br />Step 4 - Replace the javascript code of customer-search-btnSearch-onclick.js with the following:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL10NRkYyXryl_QqSxj4sI5g9bZBa7loIV_vsx41c3ljloL5Aln-Ew8UxxEre1e2GaJTt8oZoBUtMA-pMIUAgVAXOQAx-WpstzKPwkGTU0SahpcZZGTFpr83CrA1OMeRC7GfW946B7w00/s1600-h/4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL10NRkYyXryl_QqSxj4sI5g9bZBa7loIV_vsx41c3ljloL5Aln-Ew8UxxEre1e2GaJTt8oZoBUtMA-pMIUAgVAXOQAx-WpstzKPwkGTU0SahpcZZGTFpr83CrA1OMeRC7GfW946B7w00/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5242256765370410450" border="0" /></a><br />In the above code, we're building the url using VroomUtils.generateUrl() method. The method takes four arguments, first two are mandatory. The arguments are "method", "beanClass", "var" and "scope". In the above javascript we've passed "getCustomers" as method and "com.myco.demo.bean.DatabaseBean" as beanClass.<br /><br />Step 5 - Debug the application and click "Search" button. This time you'll see the list of customers in JSON format in an alert.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHWluYJ8EwMU9P8V6s0iDtcweV8hhCFtF-N5boaxSVRixBon-MGHk7-4Rl0uzGZcXwAfYMu3pvyO6ahM60KN0Qji6M5Cmro6zjNlIJOevEfVczkduZQJnHOspye_XZc75E3xjCx05s3l0/s1600-h/5.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHWluYJ8EwMU9P8V6s0iDtcweV8hhCFtF-N5boaxSVRixBon-MGHk7-4Rl0uzGZcXwAfYMu3pvyO6ahM60KN0Qji6M5Cmro6zjNlIJOevEfVczkduZQJnHOspye_XZc75E3xjCx05s3l0/s320/5.png" alt="" id="BLOGGER_PHOTO_ID_5242256761592629234" border="0" /></a><br /><br />The alert is just to check that we're getting correct results. Now we're going to add Yahoo UI DataTable.<br /><br />Step 1 - First of all we need to identify what YUI scripts and CSS files are required to use the DataTable. To check that we'll use YUI Dependency Configuration using the following URL: <a href="http://developer.yahoo.com/yui/articles/hosting/#configure">http://developer.yahoo.com/yui/articles/hosting/#configure</a>:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh253AA4WeaX6tvmncTcwmCDexMqmNoTYiJZscOJJKj-QscnpPyJWM1T1LM8xmVopfm3Bpcqc5yLOIVmvK8rMWqB0hzGD8SMkFKvDuwzu2EtPwuooKLary4b2PbYEAel_VVtQM1d2jNKWk/s1600-h/1.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh253AA4WeaX6tvmncTcwmCDexMqmNoTYiJZscOJJKj-QscnpPyJWM1T1LM8xmVopfm3Bpcqc5yLOIVmvK8rMWqB0hzGD8SMkFKvDuwzu2EtPwuooKLary4b2PbYEAel_VVtQM1d2jNKWk/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5242259680713510802" border="0" /></a><br />Select Connection Manager, JSON and DataTable in the configuration. In my setup I've deployed complete YUI library as a war file to my GlassFish server with /yui/ context. All the scripts and CSS are available under "build" folder which can be accessed with base /yui/build/.<br /><br />Step 2 - The YUI Dependency Configuration Utility will give the list of required CSS and JS files. Just copy the files, and paste in a text editor. Replace all href= and src= with url= also replace "> with "/> and replace with empty string. This will make the script and link tags compatible with vroom-config.xml tags. Create a new webpage definition to include all the webpages as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgie_jc3hY-z4wuiPFVd6vOIeKJ9EKO6v0A1Fn3ZShzXSOoUmefe49kKhyDFYjXNdsBSHNe6KprnRdvMNbAzdFe-Em-ozSshK2-Cnd6E1lGP71Ric7WKFBP7Y4NcimjZZrK-aZK3_DU1U/s1600-h/2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgie_jc3hY-z4wuiPFVd6vOIeKJ9EKO6v0A1Fn3ZShzXSOoUmefe49kKhyDFYjXNdsBSHNe6KprnRdvMNbAzdFe-Em-ozSshK2-Cnd6E1lGP71Ric7WKFBP7Y4NcimjZZrK-aZK3_DU1U/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5242259682909414098" border="0" /></a><br /><br />Step 3 - Copy the code of YUI Basic Data table from the following location:<br /><a href="http://developer.yahoo.com/yui/examples/datatable/dt_basic.html">http://developer.yahoo.com/yui/examples/datatable/dt_basic.html</a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTm2dH1e6fo8KTZBzOt7wJX_ZbXz7rmwv78bLz47M2GIoCPtwOkgQfLOyYXi1Xxk8rDpfnWY-BYzrOoIPjeMcQ5rWZnnM8mnGIyCmNI-3T8uGsZCovd95tZ9fu9u2hYBBzEe3Kxj5skxE/s1600-h/3.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTm2dH1e6fo8KTZBzOt7wJX_ZbXz7rmwv78bLz47M2GIoCPtwOkgQfLOyYXi1Xxk8rDpfnWY-BYzrOoIPjeMcQ5rWZnnM8mnGIyCmNI-3T8uGsZCovd95tZ9fu9u2hYBBzEe3Kxj5skxE/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5242259684975273362" border="0" /></a><br /><br />Step 4 - Place the DataSource script and DataTable script in the customer-search-btnSearch-onclick.js file. Replace the "basic" parameter of DataTable with "divResult".<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrF5PKCwGJT7dntD3cj_7qvHyEB2WdFDkO_Ak5mjBD5_T5IQhY7eomMIgFmG5e57Cs0aVrSUQKCnl2r0nnyqGW6Hvrp9F8mh5CCb5iTf6XojTfMVtc_CMpIrLAZ2wDi-3w4PG0R4Qy9Jc/s1600-h/4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrF5PKCwGJT7dntD3cj_7qvHyEB2WdFDkO_Ak5mjBD5_T5IQhY7eomMIgFmG5e57Cs0aVrSUQKCnl2r0nnyqGW6Hvrp9F8mh5CCb5iTf6XojTfMVtc_CMpIrLAZ2wDi-3w4PG0R4Qy9Jc/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5242259693350049986" border="0" /></a><br /><br />Step 5 - Save the files and Debug the application. Click Search button and you'll see the following table.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLNrFph9sRAFDQ2LjlVQI1xQeG4zEPGK45ebVzn0i2CDikqGhLbkugKYSQEtMrkUZG71Z0RcotUt5VSvjBRlAwGSDPHfuya1fvKYjCA-jUepsXWvWG2gTSszgBunv2GMX5AClgi2qt5us/s1600-h/5.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLNrFph9sRAFDQ2LjlVQI1xQeG4zEPGK45ebVzn0i2CDikqGhLbkugKYSQEtMrkUZG71Z0RcotUt5VSvjBRlAwGSDPHfuya1fvKYjCA-jUepsXWvWG2gTSszgBunv2GMX5AClgi2qt5us/s320/5.png" alt="" id="BLOGGER_PHOTO_ID_5242259695528542658" border="0" /></a><br />There is no skin applied to YUI components by default. To apply that we need to set the class attribute of the control or body tag to "yui-skin-sam".<br /><br />Step 6 - Instead of setting the class in every webpage, Vroom Web Framework helps us to apply these settings by just defining simple rules in vroom-config.xml file. The rules are applicable to single file or a group of files based on uri pattern. To set the "yui-skin-sam" class to every webpage, modify the rule in vroom-config.xml as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8qyDjPYQn7_pAInhqeCSqR4aFLM0mOjlmVGxhsapnQW5rcCwfOj6aEQJFxkUSiT88OdBdEktmOffXN1S4ui0AqoTuEnuN41U0aUIhMpfRK34-mqH2NNI4N2qO52glP3dAFfAyg9b7_os/s1600-h/6.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8qyDjPYQn7_pAInhqeCSqR4aFLM0mOjlmVGxhsapnQW5rcCwfOj6aEQJFxkUSiT88OdBdEktmOffXN1S4ui0AqoTuEnuN41U0aUIhMpfRK34-mqH2NNI4N2qO52glP3dAFfAyg9b7_os/s320/6.png" alt="" id="BLOGGER_PHOTO_ID_5242270553834556306" border="0" /></a><br /><br />Step 7 - Debug the application and you'll see the skin applied to the DataTable as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrsFoLPvaTeCRa_8edO-Eo7bq4eLbS5DQafl2cA10TlLz_rMkA3jb7HzgPHW_-CZbWWyVvFbl5lwNsVAIf6ctgFuQJOKNE1p6DoO7rk8p5HHqnmqe4Gb1A5RHagfkan1WsS5laxYMeOAk/s1600-h/7.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrsFoLPvaTeCRa_8edO-Eo7bq4eLbS5DQafl2cA10TlLz_rMkA3jb7HzgPHW_-CZbWWyVvFbl5lwNsVAIf6ctgFuQJOKNE1p6DoO7rk8p5HHqnmqe4Gb1A5RHagfkan1WsS5laxYMeOAk/s320/7.png" alt="" id="BLOGGER_PHOTO_ID_5242270560246407010" border="0" /></a><br /><br />Step 8 - Now, we need to tweek the code to load the DataTable from the server data. Modify the customer-search-btnSearch-onclick.js file as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4IZQ19jvpqn2Y2nP_pO4wQsTNnU3gz75Fi3NPZxh2EjF-eQpMhDDL7eYF_yWJw3oCjrkHTp5IxbVjortXGXVraszj442dvFMJhKJOwAjxXyQGZa0pN2sYf-NcBLdqX0JHmHdDXh0qt60/s1600-h/8.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4IZQ19jvpqn2Y2nP_pO4wQsTNnU3gz75Fi3NPZxh2EjF-eQpMhDDL7eYF_yWJw3oCjrkHTp5IxbVjortXGXVraszj442dvFMJhKJOwAjxXyQGZa0pN2sYf-NcBLdqX0JHmHdDXh0qt60/s320/8.png" alt="" id="BLOGGER_PHOTO_ID_5242270560439044898" border="0" /></a><br />Note that we've used the url we generated using VroomUtils.generateUrl() method in DataSource constructor. Another important thing to note is we've also defined resultsList: "array". The reason for specifying this is because Vroom Web Framework adds the returned object to an internal Map and converts the Map to JSON object. All basic data types are accessed using "value" key and Lists and Arrays are accessed using "array" key.<br /><br />Step 9 - Now refresh the webpage and click Search button and you'll see the YUI DataTable is loaded with our Customers list.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV-aJVaeKCqWI-cQlH3ifoSIHrChthz6Ww1h2ak9UskX2FtMyOofxUodmWNBHwBvXnVRL2XhKQjZVraux1V9XKliCj28zpIiy2I5y7em8jFdCi9f1UoT134k2rP8CerTc2XgYwGG5DNCs/s1600-h/9.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV-aJVaeKCqWI-cQlH3ifoSIHrChthz6Ww1h2ak9UskX2FtMyOofxUodmWNBHwBvXnVRL2XhKQjZVraux1V9XKliCj28zpIiy2I5y7em8jFdCi9f1UoT134k2rP8CerTc2XgYwGG5DNCs/s320/9.png" alt="" id="BLOGGER_PHOTO_ID_5242270568361434610" border="0" /></a><br /><br />Step 10 - Now we need to pass the customer name entered in the text box to the function. To do so, modify customer-search-btnSearch-onclick.js file as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEaDDGAypbq5VkaWAMjgzXnU9cpdJ-V5rpY6iAPWDx9jGAPx4J3Ye02h78Mx4lCkYJao7UoT0L9YbNKuPsKiwU6QBfQmMr5ZVrDGXvbqXbctDnz6yuf3w68JHpfFoNoFFcxFtFtzvICKI/s1600-h/10.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEaDDGAypbq5VkaWAMjgzXnU9cpdJ-V5rpY6iAPWDx9jGAPx4J3Ye02h78Mx4lCkYJao7UoT0L9YbNKuPsKiwU6QBfQmMr5ZVrDGXvbqXbctDnz6yuf3w68JHpfFoNoFFcxFtFtzvICKI/s320/10.png" alt="" id="BLOGGER_PHOTO_ID_5242270573499777090" border="0" /></a><br /><br />Step 11 - Modify the getCustomers() method in the DatabaseBean class as follows:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH30f1l2JSCllD2QYKxf_bjPn18khZl68R_UccQ_C4KB6d8zOvVU6uyRE-2LRlB3rlDedSJpP75qWX64VDKH7GYRZPm7oguHJ__J-fyxuNwbE0xZwFGKjczCW62-ZK1deEhoBNyxtDx5E/s1600-h/11.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH30f1l2JSCllD2QYKxf_bjPn18khZl68R_UccQ_C4KB6d8zOvVU6uyRE-2LRlB3rlDedSJpP75qWX64VDKH7GYRZPm7oguHJ__J-fyxuNwbE0xZwFGKjczCW62-ZK1deEhoBNyxtDx5E/s320/11.png" alt="" id="BLOGGER_PHOTO_ID_5242273334668886306" border="0" /></a><br />If you note, you'll find that when we created the getCustomers() method first time we didn't define the HttpServletRequest parameter. But this time we added it as a parameter. The reason for this is Vroom Framework can deal with three types of method signatures:<br /><br />public void|Object method();<br />public void|Object method(HttpServletRequest);<br />public void|Object method(HttpServletRequest, HttpServletResponse);<br /><br />You can return any type of java object, the framework will try its best to convert it to JSON string.<br /><br />Step 12 - Now Debug the application and type "com" in the text box and click Search button. You'll find only those customer which contain "com" in their name.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWf7ZHXRiGIEk-sAhLHT8DX7X8pxyvXkgzs4xuhBupZ5oEzKwa35QtvIDPkWyS0KGF-EEGtBxGVQk5gIOiB7MTMhN8aZp4c2OBKHlYFTFjVsI7KoU9-OErWqs-p-OAYuqTxtXfFtdmkvc/s1600-h/12.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWf7ZHXRiGIEk-sAhLHT8DX7X8pxyvXkgzs4xuhBupZ5oEzKwa35QtvIDPkWyS0KGF-EEGtBxGVQk5gIOiB7MTMhN8aZp4c2OBKHlYFTFjVsI7KoU9-OErWqs-p-OAYuqTxtXfFtdmkvc/s320/12.png" alt="" id="BLOGGER_PHOTO_ID_5242273332699308178" border="0" /></a><br /><br />Step 13 - Try another by typing valley in the text box and click Search button and you'll find only those customers which contain valley in their name.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUc-FLaLNTgzOUOW74F8Br3wrJG_TjOPlOMvNBsqS6Y4wzkIJFA2YG3sB4UiibzYXgb9FowHSqtF8lV3HR4Uv9LGIZQt2yiCUMmY94mN4I5GoZ5Yet4LlXd5g7rPYmbTY5th2f1ZeZV0A/s1600-h/13.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUc-FLaLNTgzOUOW74F8Br3wrJG_TjOPlOMvNBsqS6Y4wzkIJFA2YG3sB4UiibzYXgb9FowHSqtF8lV3HR4Uv9LGIZQt2yiCUMmY94mN4I5GoZ5Yet4LlXd5g7rPYmbTY5th2f1ZeZV0A/s320/13.png" alt="" id="BLOGGER_PHOTO_ID_5242273336587068866" border="0" /></a><br /><br />That's all folks. I hope this time I tried my best to explain the potential of the framework. No matter what web framework you use, you can always empower your web application with Vroom Web Framework. No other framework provides such a powerful and flexible way to control your application.<br /><br />Please do provide your feed back about the framework.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com10tag:blogger.com,1999:blog-8888841891156921870.post-42736613279716276622008-08-19T00:37:00.001-07:002008-08-19T01:01:12.973-07:00Tip - Switch from http:// to https:// for secured webpagesIf you enable SSL support for your web application, you may want them to be accessed only through https: protocol. <div><br /></div><div>I've two webpages, index.jsp and profile.jsp. index.jsp is non-secured where as profile.jsp is secured and is placed under /secured/ folder of the web application. In the web.xml file I've made the following entries to protect pages under /secured/ folder:</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6wpVvd4vGgcpLa81suzYRAh1KPOIwvtdU2djFc4vr7dHY7oLRxjJkUGkDc0pWkZRyoznF8uzsFDUOgv0DN0YqsZyWqDMgghPYw7cA7Ido2Lz-Sr189sEbtt12eevymLUltPEgSeIGhp0/s1600-h/security-definition-in-webxml-file.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6wpVvd4vGgcpLa81suzYRAh1KPOIwvtdU2djFc4vr7dHY7oLRxjJkUGkDc0pWkZRyoznF8uzsFDUOgv0DN0YqsZyWqDMgghPYw7cA7Ido2Lz-Sr189sEbtt12eevymLUltPEgSeIGhp0/s320/security-definition-in-webxml-file.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5236132692000468626" style="cursor: pointer; " /></a><br /></div><div><br /></div><div>I define following simple rule in vroom-config.xml file to automatically switch the protocol from http: to https:<div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNAvcI899tIUvpWmjt7sr57id0nyf6tvvvx2zHB8KLlPeb-GIhxjaWlUZxmY453mEl7PlrKH1lg7tENCYPc4wbHKh2GueFl2_RqJWHewuOPRjTlIykCl_FQn5_-xn0tj77wh4MbdPnbOg/s1600-h/vroom-config-for-ssl-switch.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNAvcI899tIUvpWmjt7sr57id0nyf6tvvvx2zHB8KLlPeb-GIhxjaWlUZxmY453mEl7PlrKH1lg7tENCYPc4wbHKh2GueFl2_RqJWHewuOPRjTlIykCl_FQn5_-xn0tj77wh4MbdPnbOg/s320/vroom-config-for-ssl-switch.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5236135660460133586" style="cursor: pointer; " /></a><br /></div><div><br /></div><div>After the above to configurations, my application is set to handle http: to https: automatic switching. I deploy the application to GlassFish where SSL is already configured.</div><div><br /></div><div>When I access / or /index.jsp which is non-secured resource, I get the following output:</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgry1HBMwQGqXkOgDJSkjV3qKhuKpIKKoSTvIT6Wc0wHyCVU8BcFEfsXKSaqadCJY7JTS2QsQWA-KWC4yIH_0dyPAZACPJSN2Q8sly-l4eckGpvmCcuzcA-qE9BZTgz2CCrNsKHi1Qj2mI/s1600-h/public-page.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgry1HBMwQGqXkOgDJSkjV3qKhuKpIKKoSTvIT6Wc0wHyCVU8BcFEfsXKSaqadCJY7JTS2QsQWA-KWC4yIH_0dyPAZACPJSN2Q8sly-l4eckGpvmCcuzcA-qE9BZTgz2CCrNsKHi1Qj2mI/s320/public-page.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5236130601207061778" style="cursor: pointer; " /></a><br /></div><div><br /></div><div>I type url to access /secured/profile.jsp which is secured:</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf79I5mymCBFw5u0S4vckIq_ntPIvH_mXwqvFoNmnvsITWkUFcOmJ7pVUQt3pNWnb8TjyRyDlNQfzmChGs_BrzfWmurLrM_z9mRnPdDEh3kYGB9ONjFPC9DtC1R3H8SGiTurXtsIdfLlo/s1600-h/profile-public-url.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf79I5mymCBFw5u0S4vckIq_ntPIvH_mXwqvFoNmnvsITWkUFcOmJ7pVUQt3pNWnb8TjyRyDlNQfzmChGs_BrzfWmurLrM_z9mRnPdDEh3kYGB9ONjFPC9DtC1R3H8SGiTurXtsIdfLlo/s320/profile-public-url.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5236130596791741442" style="cursor: pointer; " /></a><br /></div><div><br /></div><div>Once I hit submit button, I receive the following page which is served using https: protocol, observe the protocol and port underlined in red.</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU04hIzpBI2s4oww2Krel4QKO3u7VgenetCjdFBJYKPx-OSDMnAhekRzGY-BDMjBYtzLYxECASj1cfjiqKtErztQzGxWj7Zfs9qmk5jeI8o-XS_d9Ca1R5_H1_fF81Mj3OAPcC0dijydI/s1600-h/profile-secured-url.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU04hIzpBI2s4oww2Krel4QKO3u7VgenetCjdFBJYKPx-OSDMnAhekRzGY-BDMjBYtzLYxECASj1cfjiqKtErztQzGxWj7Zfs9qmk5jeI8o-XS_d9Ca1R5_H1_fF81Mj3OAPcC0dijydI/s320/profile-secured-url.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5236130600518476162" style="cursor: pointer; " /></a></div><div><br /></div><div>That's all you need to make it work.</div></div>Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-91929366045511012972008-08-18T13:52:00.000-07:002008-08-18T14:35:44.243-07:00Tip - Invalidating orphaned sessionsWeb applications are normally configured to timeout sessions if they remain inactive for certain amount of time e.g. 30 minutes. This is normally setup in web.xml file by defining <session-config> element.<br /><br />Sometimes a session becomes orphaned if the user does not logout properly and either closes the browser or opens a different url in the same window. To explicitly invalidate these sessions earlier rather than waiting for 30 minutes, you can use following technique.<br /><br />Define a java class named "com.myco.bean.SessionBean" as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiklR0Ye5FNDQ-TRoPGvcONKtwWlBDmEDXJI7O1bX7HoYl70-hv0Wim6J-tEXNNiWcOYCpuIyHpeYm3tZkVJq-CuvUEhyphenhyphen4PLSmW1NY0GDXjh2yIsi0es8tWzBXQR3yonUPocZatZXoyxYI/s1600-h/session-bean-code.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiklR0Ye5FNDQ-TRoPGvcONKtwWlBDmEDXJI7O1bX7HoYl70-hv0Wim6J-tEXNNiWcOYCpuIyHpeYm3tZkVJq-CuvUEhyphenhyphen4PLSmW1NY0GDXjh2yIsi0es8tWzBXQR3yonUPocZatZXoyxYI/s320/session-bean-code.png" alt="" id="BLOGGER_PHOTO_ID_5235968205455129426" border="0" /></a><br /><br />In this class, we've defined one variable named "tracker" and two methods "onLoad" and "onUnload". onLoad method increments the tracker value by 1 and onUnload decrements the value by 1 and sleeps for 10 seconds. After 10 seconds, if the tracker value remains 0, the session is treated as orphaned and invalidated.<br /><br />Define a rule in vroom-config.xml file as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI-WozujdNTw0e8vSoIsLjTiZcMIWaXrh-xzHdIYk7CVBDpYzmAGHU4AEi9a1xq8BQyIsHYCep8U1O0GMVTYu-amEcog11vRWltbSldbluRsPn1kJ5CgeWkfYo3uDs45SBeKAWSjVxxKs/s1600-h/vroom-config-session-bean-usage.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI-WozujdNTw0e8vSoIsLjTiZcMIWaXrh-xzHdIYk7CVBDpYzmAGHU4AEi9a1xq8BQyIsHYCep8U1O0GMVTYu-amEcog11vRWltbSldbluRsPn1kJ5CgeWkfYo3uDs45SBeKAWSjVxxKs/s320/vroom-config-session-bean-usage.png" alt="" id="BLOGGER_PHOTO_ID_5235968210463292258" border="0" /></a><br /><br />In the rule just note that we've bound the onload and onunload events of document object with SessionBean's onLoad and onUnload methods.<br /><br />Let's say we've page1.jsp, page2.jsp and page3.jsp in our application. When the user opens page1.jsp, the value of tracker becomes 1 because onLoad method gets called. Now the user opens page2.jsp on a different tab, the value of tracker becomes 2 because tabs in browsers usually share a single session. If user loads page3.jsp in tab which was displaying page1.jsp, onUnload method gets called because page1.jsp is going to unload so the tracker value becomes 1 and the thread sleeps for 10 seconds. Meanwhile page3.jsp is loaded and tracker again becomes 2. When the thread wakes up the value of tracker remains 2 so session remains valid. Now user closes the browser and onUnload method gets called for both page2.jsp and page3.jsp. The tracker's value becomes 0. After 10 seconds when the thread wakes up, the value of tracker remains 0 so the session is invalidated.<br /><br />This helps web application not to have orphaned sessions at all and to make the application more efficient and resource optimized.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com1tag:blogger.com,1999:blog-8888841891156921870.post-44443639421110936442008-08-18T00:34:00.000-07:002008-08-18T00:55:47.245-07:00Tip - One simple rule to setup Google AnalyticsTo setup your web application for Google Analytics requires you to paste Google Analytics Scripts to all your web pages before the </body> tag:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh51oxd15gjRxw7HRwOksgil5OSrADf1nlJSxxyaeNI-3dKD3_X54HY7vw_MYlwrrH3nwqbcVXHd678hY6YiNly5Vr3_jaUqTq8kpVAShdIHMebnSo7Eb0dDjXJZQBlezxppcWLgbW41hM/s1600-h/google-analytics-scripts.JPG"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh51oxd15gjRxw7HRwOksgil5OSrADf1nlJSxxyaeNI-3dKD3_X54HY7vw_MYlwrrH3nwqbcVXHd678hY6YiNly5Vr3_jaUqTq8kpVAShdIHMebnSo7Eb0dDjXJZQBlezxppcWLgbW41hM/s320/google-analytics-scripts.JPG" alt="" id="BLOGGER_PHOTO_ID_5235759749401447346" border="0" /></a><br /><br />Now imagine if you've dozens of webpages and you're required to make changes to all of them, you need to place the above mentioned script to every webpage. For every new webpage you also need to do the same.<br /><br />If you use Vroom Framework with your web application no matter what other web framework you're using (Struts, JSF, etc.), following simple rule defined in the vroom-config.xml file instructs Vroom Framework to setup Google Analytics to all your webpages at runtime:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIkYkmkGFZQSXTX221xSi2Jo0h5JhdbvW9BhZg3YMCAVj3ckNnIR9f6J3Bo09hUowvAQZF4vSDh-PPiGHM419J085IvhYYMHAGTY4KnKJcsXZqPsb_VsHnCEavK1Ziu_RGTORLWf_xs9Y/s1600-h/google-analytics-setup.JPG"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIkYkmkGFZQSXTX221xSi2Jo0h5JhdbvW9BhZg3YMCAVj3ckNnIR9f6J3Bo09hUowvAQZF4vSDh-PPiGHM419J085IvhYYMHAGTY4KnKJcsXZqPsb_VsHnCEavK1Ziu_RGTORLWf_xs9Y/s320/google-analytics-setup.JPG" alt="" id="BLOGGER_PHOTO_ID_5235763270506617346" border="0" /></a><br /><br />Now the above approach does not require any changes to your webpages. It will automatically take care of existing and all new webpages you'll design for your web application.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-75988469489965420042008-08-16T23:17:00.000-07:002008-08-17T00:35:23.553-07:00Tutorial 1 - Using Vroom Plugin for NetBeans 6.1Finally the plugin is ready and has been published to both SourceForge.net and NetBeans Plugin Portal. In this post I'm going to demonstrate the use of the plugin to build a simple web application.<br /><br />Prerequisite: I assume that you already have installed NetBeans plugin for Vroom Framework. If not then download it from <a href="http://sourceforge.net/project/platformdownload.php?group_id=205514">Project Website</a>, decompress the zip file and install the .nbm file using Downloaded Tab under Tools/Plugins menu of NetBeans 6.1 IDE.<br /><br />Step 1 - Create a new web project named "VroomDemo"<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_puniTxvACETZ271OSawx8nt71cc0YtjtKbty6ueiifa7TgQQQz-y5MkxX7vcTCxgnxYez7YkBV4Iwme-ZKOixEE_B-O0MnVq3KN_uJROsgIaBtrH2Vq6yv47I6CGB3HghjhK8aJJ6E/s1600-h/step2.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_puniTxvACETZ271OSawx8nt71cc0YtjtKbty6ueiifa7TgQQQz-y5MkxX7vcTCxgnxYez7YkBV4Iwme-ZKOixEE_B-O0MnVq3KN_uJROsgIaBtrH2Vq6yv47I6CGB3HghjhK8aJJ6E/s320/step2.png" alt="" id="BLOGGER_PHOTO_ID_5235284106677137874" border="0" /></a><br /><br /><br />Step 2 - In the frameworks panel, Check Vroom Framework and click Finish.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0i5yOBc1_ax29lmcChS8P0hnLRFuDmm5eDbuwkEGQxA-7XiHwac1vcn8CwzjV0BX6YPdxczx03ukvTe2hhD9Z0lh_H0djBXf3qZEhbqgfslZNHs2efsHIdU4iBUkdOZ8fJxTQCkhJWyU/s1600-h/step4.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0i5yOBc1_ax29lmcChS8P0hnLRFuDmm5eDbuwkEGQxA-7XiHwac1vcn8CwzjV0BX6YPdxczx03ukvTe2hhD9Z0lh_H0djBXf3qZEhbqgfslZNHs2efsHIdU4iBUkdOZ8fJxTQCkhJWyU/s320/step4.png" alt="" id="BLOGGER_PHOTO_ID_5235284502169754770" border="0" /></a><br /><br />Step 3 - The project will be setup to use the framework. To check that, simply run the application and you should see the following screen.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM7v6gVQfqOaiikJTMTNKNDsgvaL3FAjVf9l-t2viFlIRZNHXWdYQhQlgWi81QuQ4fnlM-WOjynKR4bo9bgfsMl5zP7bRJeSReHKAJyxYCCk2uRanQ8hgeCLgwZ2xg4vsbtBUFVHjIabA/s1600-h/step8.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM7v6gVQfqOaiikJTMTNKNDsgvaL3FAjVf9l-t2viFlIRZNHXWdYQhQlgWi81QuQ4fnlM-WOjynKR4bo9bgfsMl5zP7bRJeSReHKAJyxYCCk2uRanQ8hgeCLgwZ2xg4vsbtBUFVHjIabA/s320/step8.png" alt="" id="BLOGGER_PHOTO_ID_5235285383181401442" border="0" /></a><br /><br />Step 4 - Create a new JSP page named "register.jsp". The page should look like as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib2mctR_POz9gWJHpRLxecIo4fM7MJm87aNX7eLCVSfgO7AMdDMyOMh8wY7J-QQlKyNdxDc29LRYB_t6J6NtQTNA4Bhyphenhyphen5hnbXUNcIb__0M92jmdttiguiKhng3vVcPqSwXsWPvtyWo_B8/s1600-h/step12.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib2mctR_POz9gWJHpRLxecIo4fM7MJm87aNX7eLCVSfgO7AMdDMyOMh8wY7J-QQlKyNdxDc29LRYB_t6J6NtQTNA4Bhyphenhyphen5hnbXUNcIb__0M92jmdttiguiKhng3vVcPqSwXsWPvtyWo_B8/s320/step12.png" alt="" id="BLOGGER_PHOTO_ID_5235285957734545986" border="0" /></a><br /><br />If you notice, firstName and lastName are input tags of type "text" and nationality is select tag. For gender there is no control but a simple span with id "divGender". Don't worry this span will contain gender values as radio buttons.<br /><br />Step 5 - Create a java class named "RegisterBean" under "com.myco.bean" package and add the following code:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCGW-3fat1c2jWV-O8pSqNl0ZlktpaXYi1TAtqPh4EwfSZjf9pXf9gS_99ZaxKVNVihFccMrb1VIHQrpGD0sIFhw5h7YCIpKMbxoANEk9a1FkxUuB1fX8tTGw9Uv8N_cxABo-iy8DKTGA/s1600-h/step14.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCGW-3fat1c2jWV-O8pSqNl0ZlktpaXYi1TAtqPh4EwfSZjf9pXf9gS_99ZaxKVNVihFccMrb1VIHQrpGD0sIFhw5h7YCIpKMbxoANEk9a1FkxUuB1fX8tTGw9Uv8N_cxABo-iy8DKTGA/s320/step14.png" alt="" id="BLOGGER_PHOTO_ID_5235286483693524338" border="0" /></a><br /><br />The above java class contains firstName, lastName, nationality and gender properties. There is a method named "register", we'll bind this method with form in the configuration file.<br /><br />Step 6 - Create a JSP named "confirmation.jsp". The page contents should look like as follow:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZJC2g5Nqm73X9olRjCf570hOCRSuT36KOZYvrYSqbTvZHMhErXbt5DI2eNdCQxmv5R7x_CFvFuJKFhr43r9pIOno9wRwt53uCmZFNrjk1FsbNrnuHuugISsWsYegeZt24epgO6zjz0s/s1600-h/step16.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZJC2g5Nqm73X9olRjCf570hOCRSuT36KOZYvrYSqbTvZHMhErXbt5DI2eNdCQxmv5R7x_CFvFuJKFhr43r9pIOno9wRwt53uCmZFNrjk1FsbNrnuHuugISsWsYegeZt24epgO6zjz0s/s320/step16.png" alt="" id="BLOGGER_PHOTO_ID_5235341872749453650" border="0" /></a><br /><br />Once the registration is successful, the user will be redirected to this page.<br /><br />Step 7 - Create a java class named "LookupBean" under "com.myco.bean" package and place the following code:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoamg6gs_OspgmQY37-5CSz1dO0GPGSOt9JNwMPYYXvgPgUZ-znRJW63JiW5P0T-1TtmcvbZg_s1ZtdNZhI0Li7u7z5Kv-a9SA1q8pXBnlCkHRWs30ne6B4PpK_Jv_IHKyH0ksih40ppw/s1600-h/step18.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoamg6gs_OspgmQY37-5CSz1dO0GPGSOt9JNwMPYYXvgPgUZ-znRJW63JiW5P0T-1TtmcvbZg_s1ZtdNZhI0Li7u7z5Kv-a9SA1q8pXBnlCkHRWs30ne6B4PpK_Jv_IHKyH0ksih40ppw/s320/step18.png" alt="" id="BLOGGER_PHOTO_ID_5235341869618093794" border="0" /></a><br /><br />The purpose of LookupBean is to provide list of values e.g. nationalities and genders.<br /><br />Step 8 - Open vroom-config.xml file by right-clicking on the file and select Open. Delete all existing webpage definitions and defining one for register.jsp as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS0c6DRk4wBqlbaZ7pcBn9zsNcW77Qf8OSaONzZGrQsxniBZtn92IEIMkeohHKR6EULa3N4r9v-YYxSGvdlEFTjqIOCGSR_2A4-bLLn86-rlmEk5hAUdqDNOSAKOfxHw-aB5PJ20xFp6k/s1600-h/step19.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS0c6DRk4wBqlbaZ7pcBn9zsNcW77Qf8OSaONzZGrQsxniBZtn92IEIMkeohHKR6EULa3N4r9v-YYxSGvdlEFTjqIOCGSR_2A4-bLLn86-rlmEk5hAUdqDNOSAKOfxHw-aB5PJ20xFp6k/s320/step19.png" alt="" id="BLOGGER_PHOTO_ID_5235343322398172802" border="0" /></a><br /><br />Use Ctrl+Space to initiate Code Completion. The plugin will automatically detect the web pages available in the web module.<br /><br />Step 9 - Select "RegsiterBean" as bean-class, "rb" as var and "session" as scope.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiztCzvl7mOmPprX7eG0yFBpK8YVaAVLmjNEDCETku8rODCp0zODulQHojTm6ALhzM7UjZpCWFJi4JdwU2krDXfRPDVJbWxRcLkEibsLDXZVnTTR6fX570mmS__JB8LzRUsd9RPa1LiAHI/s1600-h/step20.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiztCzvl7mOmPprX7eG0yFBpK8YVaAVLmjNEDCETku8rODCp0zODulQHojTm6ALhzM7UjZpCWFJi4JdwU2krDXfRPDVJbWxRcLkEibsLDXZVnTTR6fX570mmS__JB8LzRUsd9RPa1LiAHI/s320/step20.png" alt="" id="BLOGGER_PHOTO_ID_5235343327791417042" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAE8oFfqA_PCP3JMYvCamTkOfyQMYEEGDPtitl3KpvZ-b0KAJJbU9Mh0eDeWOVj6uXvbpemYFqgOjyjHPEbV1WiB5dUtBNy-y5OE37MopK41lmZq5TeLzDcdc3i3EVZCsJmSDAY59aP98/s1600-h/step21.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAE8oFfqA_PCP3JMYvCamTkOfyQMYEEGDPtitl3KpvZ-b0KAJJbU9Mh0eDeWOVj6uXvbpemYFqgOjyjHPEbV1WiB5dUtBNy-y5OE37MopK41lmZq5TeLzDcdc3i3EVZCsJmSDAY59aP98/s320/step21.png" alt="" id="BLOGGER_PHOTO_ID_5235343325195693714" border="0" /></a><br /><br />Step 10 - Define object element for webpage and select document for the name attribute.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieXOCnCgs6N8-9r8udclJoc64PfcHHMmfzj6JuagQ_NVij0gEZ26yUmdvPwOMGSjbCO5gGfd_5K_lXQ9_m55pUybk_SeeQGIjC6mXQhNGGwfOA3o2Rjr1wYSvovyGwffpSoDGYg2_xBKw/s1600-h/step22.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieXOCnCgs6N8-9r8udclJoc64PfcHHMmfzj6JuagQ_NVij0gEZ26yUmdvPwOMGSjbCO5gGfd_5K_lXQ9_m55pUybk_SeeQGIjC6mXQhNGGwfOA3o2Rjr1wYSvovyGwffpSoDGYg2_xBKw/s320/step22.png" alt="" id="BLOGGER_PHOTO_ID_5235343332316475746" border="0" /></a><br /><br />Step 11 - Define event element for object and select "onload" for type and "LookupBean" for bean-class attribute:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwM4GAB5F9JKOuRItX5kU-C80FMrj0dd2vX-TJ43-dKjv5z5saj9XpDcByihQ3X9NBUjvrNq68m04V8qcnLUT7Lvhm4ExdlD3vwYRiMHb-t_iLByhr0414TQ8cZS3iaRSnoWKIKvqMNVg/s1600-h/step23.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwM4GAB5F9JKOuRItX5kU-C80FMrj0dd2vX-TJ43-dKjv5z5saj9XpDcByihQ3X9NBUjvrNq68m04V8qcnLUT7Lvhm4ExdlD3vwYRiMHb-t_iLByhr0414TQ8cZS3iaRSnoWKIKvqMNVg/s320/step23.png" alt="" id="BLOGGER_PHOTO_ID_5235346453761677314" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEhRwlZRuZKjck8zcsFoCzf5B-Gro4yCXM2cC6fyhyphenhyphenyb7wYPNnNbi7u2u1qyNe_C8aRBlVOhq0K4zd3ewQOQEHtzm6crhfniR2SygLXzLqWJEZW794gDrmsdRK5PZlxI1DoZ62RUDj04w/s1600-h/step24.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEhRwlZRuZKjck8zcsFoCzf5B-Gro4yCXM2cC6fyhyphenhyphenyb7wYPNnNbi7u2u1qyNe_C8aRBlVOhq0K4zd3ewQOQEHtzm6crhfniR2SygLXzLqWJEZW794gDrmsdRK5PZlxI1DoZ62RUDj04w/s320/step24.png" alt="" id="BLOGGER_PHOTO_ID_5235346453776108370" border="0" /></a><br /><br />Step 12 - Define call element for event and select "script" for type attribute:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx0RMuFWXCAoDOLKA1nJGqIuuLDsJ8d_KZIF-VhLl6xW94z9imj6VE_DS_Y6-E3XMayxo3rY1fxYNbY7bpdPXw80HdG3EVFUCKb3NFMapawkR7nz0ZJP1v89S-sj9T8TkEoV3nZ9h7emQ/s1600-h/step25.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx0RMuFWXCAoDOLKA1nJGqIuuLDsJ8d_KZIF-VhLl6xW94z9imj6VE_DS_Y6-E3XMayxo3rY1fxYNbY7bpdPXw80HdG3EVFUCKb3NFMapawkR7nz0ZJP1v89S-sj9T8TkEoV3nZ9h7emQ/s320/step25.png" alt="" id="BLOGGER_PHOTO_ID_5235347087774317586" border="0" /></a><br /><br />You should select "script" for a call type if you want to execute a script. For updating the contents/properties of the webpage elements, you should select "update".<br /><br />Step 13: Place the cursor between opening and closing call tag ( <call type="script"> </call> ) and press Ctrl+F1 or Right+Click and select Edit to invoke JavaScript editor:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Y5OhrppN63-909bYxxDWY1YCd2U0ZaM6bihzBtY6gZ_C_gCVo-lZiWPYQlYuErtL83O3ZsOFPKKtgvgzah9AhcIeMi7nv3A-oMQL9W2hl7MeoQq8BCT_7NsgwTmGHXjyN3Z9uBBIhzw/s1600-h/step26.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Y5OhrppN63-909bYxxDWY1YCd2U0ZaM6bihzBtY6gZ_C_gCVo-lZiWPYQlYuErtL83O3ZsOFPKKtgvgzah9AhcIeMi7nv3A-oMQL9W2hl7MeoQq8BCT_7NsgwTmGHXjyN3Z9uBBIhzw/s320/step26.png" alt="" id="BLOGGER_PHOTO_ID_5235348853229345714" border="0" /></a><br /><br />Step 14: Write the following code in the JavaScript editor:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQrbcBmr9PnueHwcMhuHFO7uqw1Ygub1LbV6XpXyJ38XADftzLRlOsn8QLKVoN5JYbgBThrRVq5mSKPEi3JpskUl_BFRQsLc0BgXGfq_5ZHZdKdf3IofqmuWStuS8Bj4d1hWgGc4SkzM/s1600-h/step28.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQrbcBmr9PnueHwcMhuHFO7uqw1Ygub1LbV6XpXyJ38XADftzLRlOsn8QLKVoN5JYbgBThrRVq5mSKPEi3JpskUl_BFRQsLc0BgXGfq_5ZHZdKdf3IofqmuWStuS8Bj4d1hWgGc4SkzM/s320/step28.png" alt="" id="BLOGGER_PHOTO_ID_5235348854087537570" border="0" /></a><br /><br />VroomUtils class provide some utility functions that are very helpful to manipulate HTML DOM objects. populateSelect() takes two arguments, select name and the json string. The json string must be an array or list of a bean having "label" and "value" properties. For custom properties, you may use populateSelectEx() which takes four arguments. First two are the select name and json string, the third and fourth are the label and value property name. E.g.<br /><br />VroomUtils.populateSelect('nationality', '#{nationalities}'); // assumes the json string is an array of beans having label and value property names.<br />VroomUtils.populateSelectEx('nationality', '#{nationalities}', 'name', 'id'); // where the bean contains name and id as properties.<br /><br />generateRadioGroup() takes four arguments, the first argument is the div or span id which will contain the radio buttons, the second argument is the name that is assigned to the generated radio buttons. Third argument is the json string which I just explained above and fourth is the no of columns. Since I've two values for gender and I want them to appear on the same line, I've passed 2 as argument value.<br /><br />For details of the functions you may look into the Vroom-2.1.4.pdf document available as download or the Vroom Framework article avaliable at wikipedia.org.<br /><br />Step 15 - Update the event element defined for document object and add var, scope and method attributes as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1B6gmpSZhWQHpwSVbMejzj6ps_HNSyU7ewtzCcwtUOdbiheFbvK9U5X4YEsoHPyyyI9AZsqRpvNxWH5Rm_N-3jtY0YETPf-8ulyNL0kKj1KWq0a7LCnVcL3Oys9skBKZHFc1Rz2cA6g/s1600-h/step35.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1B6gmpSZhWQHpwSVbMejzj6ps_HNSyU7ewtzCcwtUOdbiheFbvK9U5X4YEsoHPyyyI9AZsqRpvNxWH5Rm_N-3jtY0YETPf-8ulyNL0kKj1KWq0a7LCnVcL3Oys9skBKZHFc1Rz2cA6g/s320/step35.png" alt="" id="BLOGGER_PHOTO_ID_5235345695975291538" border="0" /></a><br /><br />If the bean-class has any property available with getter method, the code completion will show "getProperties" in the completion items. It is helpful if you want to access multiple properties by name in a single call. If you select "getNationalities" as method then you won't be able to get "genders" in the same call and instead of using #{nationalities.array} you'll simply type #{array}.<br /><br />Step 16 - Define form element for webpage and select "frmRegister" as form id. This is defined in the register.jsp:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4svMPv-SvFHrazB7sl66FVxLxYQNKvVp6w7Yj9TyxAwNfR4AN50QeN0UKkxVwXJoLT3RmhedpZouFJFDzsgX0WG9Ya6cuOZyPJhCItPgK4iPiVZODQQU_I4ItcUb9_2ItULPZLPUxsM/s1600-h/step30.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4svMPv-SvFHrazB7sl66FVxLxYQNKvVp6w7Yj9TyxAwNfR4AN50QeN0UKkxVwXJoLT3RmhedpZouFJFDzsgX0WG9Ya6cuOZyPJhCItPgK4iPiVZODQQU_I4ItcUb9_2ItULPZLPUxsM/s320/step30.png" alt="" id="BLOGGER_PHOTO_ID_5235352285176932786" border="0" /></a><br /><br />Step 17 - Complete the form element by defining bean-class, var, scope and method attributes:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVDkJNpMu2BA2aCGufBacfBSIuBlieIJgH_Bc-RRu_UZ-ESumtxA1OZCoPPy76G_3aiKsdHEktQ8PamZsgq0-FSp5AD0elWQ2DjqlZeUQ0e8Qz2HYNJKGMp_yysplLk4o2N2YgJesIByI/s1600-h/step31.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVDkJNpMu2BA2aCGufBacfBSIuBlieIJgH_Bc-RRu_UZ-ESumtxA1OZCoPPy76G_3aiKsdHEktQ8PamZsgq0-FSp5AD0elWQ2DjqlZeUQ0e8Qz2HYNJKGMp_yysplLk4o2N2YgJesIByI/s320/step31.png" alt="" id="BLOGGER_PHOTO_ID_5235352289471687106" border="0" /></a><br /><br />For method attribute, select "register" in the list. This will bind the form with "register" method of the RegisterBean class.<br /><br />Step 18 - Define navigation elements for form. For outcome "success" the url should be "/confirmation.jsp" and for outcome "failure" it should be the same page i.e. "/register.jsp" with forward attribute set to "true". The forward attribute is very important to preserve the information user entered previously.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI2p7TDEspgZhSamrcwAMa28NOfY-reE_Yb6QraSrvIwExcvRZ4px57-Zg2LIegz6f8Pb2e1qOGhuPh5SG2UOqshaYTRN4m4iL_0YVffguM6a0WQOItwGhYX31x3KE33MkCDX-F6asoOo/s1600-h/step32.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI2p7TDEspgZhSamrcwAMa28NOfY-reE_Yb6QraSrvIwExcvRZ4px57-Zg2LIegz6f8Pb2e1qOGhuPh5SG2UOqshaYTRN4m4iL_0YVffguM6a0WQOItwGhYX31x3KE33MkCDX-F6asoOo/s320/step32.png" alt="" id="BLOGGER_PHOTO_ID_5235352296609974738" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirkyEvP0pim_CH7fCghZCzIcCJIQzzGYq-WnXfz-KnnX4R4iItpxeCAmRF3Ay3_6BtYDS-KsSOlxq0hv4fKpayeG_kmd3Uj-RdYzpdLg_Hfc4UodOdSonDYx2Zgp5fzoAIw_vHy_zsTZg/s1600-h/step33.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirkyEvP0pim_CH7fCghZCzIcCJIQzzGYq-WnXfz-KnnX4R4iItpxeCAmRF3Ay3_6BtYDS-KsSOlxq0hv4fKpayeG_kmd3Uj-RdYzpdLg_Hfc4UodOdSonDYx2Zgp5fzoAIw_vHy_zsTZg/s320/step33.png" alt="" id="BLOGGER_PHOTO_ID_5235352298166600418" border="0" /></a><br /><br />Step 19 - define the elements which you want to post when the framework invokes "register" method. The framework automatically populates the fields of the bean-class. If the fields do not belong to the same bean class which is used for form, you may define fine grained definition by defining bean-class, var, scope at the element level. E.g. <element id="firstName" bean-class="com.myco.bean.SomeOtherBean" var="sob" scope="session"/><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFLFC0YNYraXmHY73ajg_0-qu-6VBQSz8AFzMtZXyKCd_ZjdOK6fM5jCKxIpfs2gGfY-KmliygBfx2e2a_1ZxwFEJoxN4kRiW14IkoFILnJoyQ2VQaUmkdAg6faqsHjjocRiS0dbWcJ8U/s1600-h/step34.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFLFC0YNYraXmHY73ajg_0-qu-6VBQSz8AFzMtZXyKCd_ZjdOK6fM5jCKxIpfs2gGfY-KmliygBfx2e2a_1ZxwFEJoxN4kRiW14IkoFILnJoyQ2VQaUmkdAg6faqsHjjocRiS0dbWcJ8U/s320/step34.png" alt="" id="BLOGGER_PHOTO_ID_5235352299301704434" border="0" /></a><br /><br />Step 20 - Compile and run the web application and type "http://localhost:port/VroomDemo/register.jsp" url. Replace the port with the port no. of your tomcat server. You'll see the following webpage:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo09mYacO2pXN8VybUHxWMM1XY6bs6l8Y8OfEVc5PjFrWIn-lC-ydm_7tlmTRHRuS5kBZowjzquebcw4NDn0NxumG7RcMRKNK5GWHmyUQsN9EBX-h1Nbw_8_iJnuTeulgMTrv_ykF752I/s1600-h/step36.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo09mYacO2pXN8VybUHxWMM1XY6bs6l8Y8OfEVc5PjFrWIn-lC-ydm_7tlmTRHRuS5kBZowjzquebcw4NDn0NxumG7RcMRKNK5GWHmyUQsN9EBX-h1Nbw_8_iJnuTeulgMTrv_ykF752I/s320/step36.png" alt="" id="BLOGGER_PHOTO_ID_5235355479797747666" border="0" /></a><br />Note that the divGender span tag contains "radio" buttons to select gender. These are dynamically generated as a result of generateRadioGroup() method of VroomUtils javascript class.<br /><br />Step 21 - Type first name, select nationality and gender and click submit. The server will display the same webpage populating the fields you entered.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDneWDNuLTTgSr6YdJoSCO6y3GVFc2gIqkYdAYmqrzzjullOcgGOUl1J5_N9wDAcJpHECglgePGBh4kxX8f9MtDmaaI95IQxOTXVxetKk7PPgQRLZdQMixB18s1kIZJKE6Q1GxsQt39Q/s1600-h/step37.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDneWDNuLTTgSr6YdJoSCO6y3GVFc2gIqkYdAYmqrzzjullOcgGOUl1J5_N9wDAcJpHECglgePGBh4kxX8f9MtDmaaI95IQxOTXVxetKk7PPgQRLZdQMixB18s1kIZJKE6Q1GxsQt39Q/s320/step37.png" alt="" id="BLOGGER_PHOTO_ID_5235355482060182642" border="0" /></a><br /><br />Observe the url in the browser. This is because the response has been forwarded.<br /><br />Step 22 - Enter the last name as well and submit the form, you'll get confirmation.jsp webpage:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXkLeQ-yXS5x0fMJnXWTX3RWMmP1tA7Y6fwOz639rxFM8_mp-SLH0LtXW-lHoKQKLXheuUOwwNlBqbw5mMypmKS0tz_n8YbTrVcSEGkSQs9kI7pMSTs1ffqoqYCzOP_SizvDCK8CV3G4s/s1600-h/step39.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXkLeQ-yXS5x0fMJnXWTX3RWMmP1tA7Y6fwOz639rxFM8_mp-SLH0LtXW-lHoKQKLXheuUOwwNlBqbw5mMypmKS0tz_n8YbTrVcSEGkSQs9kI7pMSTs1ffqoqYCzOP_SizvDCK8CV3G4s/s320/step39.png" alt="" id="BLOGGER_PHOTO_ID_5235355486080097778" border="0" /></a><br /><br />That's all about the web application development. Let's see below how we can play with the look and feel of the web pages using call element:<br /><br />Define stylesheet element for webpage as follows:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF2PXpnwn8uCEE0mYJWzO1w-C4c6GT6ILx1snDghwTBci6X0dgTFDdFQmopE77eVd7EbVP3oKEGAI-XByQX8prRA7lXyGCEUN_sBT8Pb3zZxZPZGVeSOErHT4TJ6tV_HNIXZrv4SIcfFU/s1600-h/step40.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF2PXpnwn8uCEE0mYJWzO1w-C4c6GT6ILx1snDghwTBci6X0dgTFDdFQmopE77eVd7EbVP3oKEGAI-XByQX8prRA7lXyGCEUN_sBT8Pb3zZxZPZGVeSOErHT4TJ6tV_HNIXZrv4SIcfFU/s320/step40.png" alt="" id="BLOGGER_PHOTO_ID_5235357092497397170" border="0" /></a><br /><br />Observer that I've added another call element of type "update" for document object, for which I've selected "frmRegister" as id of the element for which I want to update the contents/properties, "className" as attribute and "form" as value. This form is defined as .form in the stylesheet element of the webpage.<br /><br />Run the application and see the difference:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-PkvXOaOjf9p9Vq7-9XxpDFY3O7n6kcEqMuWZuNj86iNRxgYoyUerFD3339Vuqal1z20H7H0Rux3wt8JIFKsxcM0E8S66em_PYV3vfUyz3Au3U6RmbaZgyuscYlgotYksWw-UYZgbTBA/s1600-h/step41.png"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-PkvXOaOjf9p9Vq7-9XxpDFY3O7n6kcEqMuWZuNj86iNRxgYoyUerFD3339Vuqal1z20H7H0Rux3wt8JIFKsxcM0E8S66em_PYV3vfUyz3Au3U6RmbaZgyuscYlgotYksWw-UYZgbTBA/s320/step41.png" alt="" id="BLOGGER_PHOTO_ID_5235357091065034114" border="0" /></a><br />I'll soon upload a more complex examples involving EJBs, Web Services and Integration with Struts Framework.<br /><br />Thanks for spending time to read the post. I believe this post has given you the clear idea about what is Vroom Framework and how you can utilize it.<br /><br />Please don't forget to post your views about the framework.<br /><span style="text-decoration: underline;"><br /><br /><br /></span>Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-10856962678352466722008-07-30T21:42:00.000-07:002008-07-30T22:10:56.796-07:00How to setup a web project for Vroom Framework?Well the detailed procedure is available at http://en.wikipedia.org/wiki/Vroom_Framework#Installation_and_Configuration<div><br /></div><div>In order to setup a web project to work with Vroom Framework, you need to do the following:</div><div><br /></div><div><ol><li>Download the latest distribution from Project's website and extract it in the folder you normally use for CLASSPATH or Java Libraries. In my case, I use C:\ClassPath (Windows) and /home/ijazfx/classpath (Linux) for my Java Libraries so I've the library available at C:\ClassPath\Vroom-2.1.4<br /></li><li>Create a web project if it's not already there.<br /></li><li>Copy the contents under C:\ClassPath\Vroom-2.1.4\WEB-INF\ to project's \WEB-INF\ folder.<br /></li><li>Define VroomFilter and VroomController in the web.xml as follows and you're done with the setup:</li></ol><code><br /><filter><br /> <filter-name>VroomFilter</filter-name><br /> <filter-class>net.openkoncept.vroom.VroomFilter</filter-class><br /> <init-param><br /> <param-name>config-file</param-name><br /> <param-value>/WEB-INF/vroom-config.xml</param-value><br /> </init-param><br /></filter><br /><filter-mapping><br /> <filter-name>VroomFilter</filter-name><br /> <url-pattern>*.jsp</url-pattern><br /></filter-mapping><br /><servlet><br /> <servlet-name>VroomController</servlet-name><br /> <servlet-class>net.openkoncept.vroom.VroomController</servlet-class><br /> <init-param><br /> <param-name>upload-file-size-threshold</param-name><br /> <param-value>1024000</param-value><br /> </init-param><br /> <init-param><br /> <param-name>upload-file-temp-folder</param-name><br /> <param-value>/WEB-INF/temp</param-value><br /> </init-param><br /></servlet><br /><servlet-mapping><br /> <servlet-name>VroomController</servlet-name><br /> <url-pattern>/vroom</url-pattern><br /></servlet-mapping><br /></code><br /></div><div>If you want to use Vroom Framework with your Struts or JSF application, add additional filter-mapping to intercept *.do or *.faces requests as follows:</div><div><br /></div>For Struts Application:<br /><code><br /><filter-mapping><br /> <filter-name>VroomFilter</filter-name><br /> <url-pattern>*.do</url-pattern><br /></filter-mapping><br /></code><br /><div>For JSF Application:<br /><code><br /><filter-mapping><br /> <filter-name>VroomFilter</filter-name><br /> <url-pattern>*.faces</url-pattern><br /></filter-mapping><br /></code><br /><div><br /></div><div><br /></div></div>Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0tag:blogger.com,1999:blog-8888841891156921870.post-5808326826329483322008-07-30T09:32:00.000-07:002008-07-30T22:11:27.015-07:00About the frameworkThe framework has potential to address almost any possible need of a J2EE web application. However, it solely depends upon how it has been configured and if not properly configured, you may get frustrated and quit using the framework. Which in fact will be a great loss on your side because it is actually quite simple to address complex issues in few minutes with this framework, which may take hours otherwise. Web application issues such as automatic log out, redirecting based on browser locale, protecting resources using custom security etc don't need to be pondered upon anymore.<br /><br />Please visit Vroom Framework at <a href="http://en.wikipedia.org/wiki/Vroom_Framework">Wikipedia</a> to know about the framework.Farrukhhttp://www.blogger.com/profile/00456229413600218531noreply@blogger.com0