<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4038066669955738165</id><updated>2024-12-18T21:26:18.484-06:00</updated><category term="Facebook"/><category term="GAE"/><category term="GWT"/><category term="Java"/><category term="Javascript"/><category term="Netbeans"/><category term="Struts"/><category term="client"/><category term="framework"/><category term="server"/><category term="widget"/><category term="App"/><category term="Engine"/><category term="Google"/><category term="App Engine"/><category term="Google App Engine"/><category term="User Javascript Opera Safari Firefox YouTube &quot;Mark as Read&quot; Inbox Message Count Feature"/><category term="User Javascript Opera configure configuration &quot;user javascript&quot;"/><title type='text'>Code Herding</title><subtitle type='html'>A place where code can roam, rest and feed...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-3896312074239499685</id><published>2010-11-19T11:14:00.005-06:00</published><updated>2012-07-04T14:41:24.636-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 8c)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8b.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Continues from part 8b...&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The algorithms to make the authorization flow described in the previous 2 parts of this chapter &lt;iframe align=&quot;right&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0789743213&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;are simple and they provide for tweaking and the usual stakeholder requisite changes.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;First the core of our filter, how to know in which part of the authorization flow through which the user is in transit:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;Returning authorized user(1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;Everyone else(2)&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;After authorization prompt(2.1)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;Authorized(2.1.1)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;Canvas(2.1.1.1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;Site(2.1.1.2)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;Not Authorized(2.1.2)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;Canvas(2.1.2.1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;Site(2.1.2.2)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;Canvas(2.2)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;UserId(2.2.1)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;ProfileId(2.2.1.1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;No profileId(2.2.1.2)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;No UserId(2.2.2)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;Site(2.3)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now let me explain how to know and what parameters to check to know in which part of that tree the user is located and what you might do after that:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;(1)access_token present in session&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Retrieve user information using access_token&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;(2)access_token not present in session&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;(2.1)requestURL == redirect_uri&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;(2.1.1)code parameter present&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Retrieve &quot;access_token&quot; using &quot;code&quot;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Store &quot;access_token&quot; in session&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;(2.1.1.1)source parameter == canvas&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Redirect to canvas&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;(2.1.1.2)source parameter == site&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Continue to site&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;(2.1.2)error_reason parameter present&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;log error reson&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;(2.1.2.1)source parameter == canvas&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Redirect to canvas with onclick auth link&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;(2.1.2.2)source parameter == site&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Continue to site with regular auth link&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;(2.2)signed_request parameter present&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Decode signed request&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;(2.2.1)userId present in signed_request&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Retrieve user information using access_token&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;(2.2.1.1)profileId present in signed_request&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Retrieve user information using access_token&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;(2.2.1.2)profileId not present in signed_request&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Retrieve user information using access_token&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: orange;&quot;&gt;(2.2.2)userId not present in signed_request&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Redirect to canvas with onclick auth link&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: cyan;&quot;&gt;(2.3)signed_request parameter not present&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;Continue to site with regular auth link&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;To decode the signed_request you need &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=B003Z0D0YU&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;to use a Base64 decoder which handles URLsafe decoding. After decoding use class javax.crypto.Mac to get a Message Authentication Code for the algorithm passed in the JSON decoded signed_request. Use your aplication secret (known only to you as a developer) and sign the JSON payload of the signed request and compare it to the decoded signature. If they match then you can rest assured the signed_request comes from the Facebook servers.&lt;/div&gt;&lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321637984&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;A few things to keep in mind which will be important when you test your code: use the EXACT same redirect_uri (including the source parameter) to retrieve the access_token. This was clearly stated in the documentation even from the early stages of the migration to the new Graph API, it helped me a lot to remember it. I used all the parameters used by Facebook (appId, appSecret, appKey, redirectUri, canvasUrl, siteUrl) as init parameters of the filter to be able to reuse the filter for other applications without changing code, and just changing those init parameters in the xml configuration.&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below. &lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/3896312074239499685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3896312074239499685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3896312074239499685'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8c.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 8c)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-6834601338764165427</id><published>2010-11-19T10:32:00.046-06:00</published><updated>2012-07-04T14:42:52.813-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 8b)</title><content type='html'>&lt;hr/&gt;&lt;iframe id=&quot;toplike&quot; allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Continues from part 8a...&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now that we know where was the user before we redirected him/her to the authorization prompt, we know the structure of our redirect_uri. After decoding (Base64) the Signed Request then we need to look for an attribute named &quot;user_id&quot;, if this attribute is not present then the user has not yet authorized our application to access their information. In the first draft I &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0307740986&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;&quot;align=&quot;left&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;decided to do an automatic redirection to the authorization prompt but then I thought about it and I chose not allow the user to have control over the flow; never force the user to do things if you don&#39;t know whether they want to do them or not.&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;In this design a simple Facebook logo with a link to the authorization prompt will be displayed to let the user decide to link their profile information to our application or to &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0470878045&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;browse the application as a guest user. In the canvas version the link provides an onclick event handler to set the window.top.location and in the web application version a regular link.&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now, how to know if the user authorized our application after the prompt? The user is going to be redirected to the redirect_uri you provide and the parameters passed to this uri are the key. If you get a &quot;code&quot; parameter then the user authorized the app, if you get an &quot;error_reason&quot; parameter (along with other error parameters) then the user did not authorize it. &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=059651817X&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;&quot;align=&quot;left&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;In the filter I check if the requested URL is the redirect_uri and then I do 2 things, first i look for the &quot;source&quot; parameter I passed along with the redirect_uri to know where to send the user after I retrieve their access token which provides us with a means to know the information they have allowed us to access, second I look for the &quot;code&quot; or &quot;error_reason&quot; parameters and if the &quot;code&quot; parameter is present then we need to exchange it for an access token by fetching a URL (web service) and parsing the (JSON) response. &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0137152221&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;If the &quot;error_reason&quot; is present then we can log the error reason, nothing much after that. The filter redirects the user to the canvas if the &quot;source&quot; parameter is canvas or simply continues to the regular flow if the &quot;source&quot; is site.&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;That covers, on an eagle-view, the canvas authorization process, now the web app authorization process and at the end of this chapter there will be a detailed design for the filter.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The web app authorization process is now more simple since we made the canvas authorization process practically the same by providing a link to the authorization prompt. &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1615640363&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;&quot;align=&quot;left&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;The difference comes in the JSP file, if you find a &quot;signed_request&quot; parameter then the user is coming from canvas and we need to use an onclick event to set &quot;window.top.location=&amp;lt;fb_auth_url&amp;gt;&quot; and if it&#39;s not present then a regular link to the fb_auth_url.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The rest is the same because we now took the common parts of the authorization and the only thing that changes can be decided by checking the &quot;source&quot; parameter and redirecting to the relevant page accordingly. After we have fetched the access_token (the user authorized our application to access their information) we need to store it for safe-keeping and to avoid going through the whole process each time the user comes to our application. It&#39;s is so that now we need to change the first part of our algorithm, we need to check if the &lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0470487623&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;access_token is present for the current visitor and if it&#39;s not then provide a link to the authorization flow.&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;That&#39;s all there is to it on paper, now on the next section the relevant algorithms to decide in which part of the authorization process currently the user is going through, how to parse the &quot;signed_request&quot; parameter, how to verify the encoded signature and how to fetch the &quot;acccess_token&quot; after the user has authorized us.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;right&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8c.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Continues here...&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below. &lt;div align=&quot;left&quot;&gt;&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;hr /&gt;&lt;iframe id=&quot;bottomlike&quot; allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/6834601338764165427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8b.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/6834601338764165427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/6834601338764165427'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8b.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 8b)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-74187058481562463</id><published>2010-11-19T10:27:00.006-06:00</published><updated>2012-07-04T16:31:34.511-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 8a)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 8: Facebook Authentication (Canvas + Web Application)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;If you&#39;re a curious developer, as I suppose you are, then you probably are always on a quest for new APIs and new ways of making your work easier to accomplish. Facebook has a platform to publish your work and expose it to millions of potential users. It provides a range of options from low-level &lt;iframe align=&quot;right&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1439102112&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;(low-level for an experienced developer like you) badges and widgets like those you can find scattered around this blog post to full-fledged database persistence, JSON-based web services, and the like (pun intended ;D).&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;In this part of the tutorial i&#39;ll try to explain my &amp;lt;adjective related to pain here&amp;gt; experience in hopes of preventing others from falling in the same pits. When i started working on the integration of a website with the Facebook platform, the process of authentication and app authorization was in the process of change. My experience was not the greatest because of all the rapid changes happening to the authentication and authorization flow needed for your application to communicate with the Facebook servers to request user info and do all the nice things you probably have in mind to provide a great user experience.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;There are 3 ways of integrating with the Facebook platform: as a canvas app, as a web application, or as a standalone application (a.k.a. desktop app). I was integrating a website so the 3rd option would be left for a future development cycle, if at all. After going through the documentation provided by Facebook I was wondering where to find an Aramaic translator, it&#39;s understandable (NOT) that they didn&#39;t have &lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0470527617&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; float: left; height: 235px; padding-bottom: 5px; padding-right: 10px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;a stable design at the time as they were going through the authentication process change (they were changing to OAuth2.0). So I decided to go with the flow and work the Facebook way (trial and error until something works). I took the little that could be salvaged of the documentation and started coding according to their explanation of what needed to be done, and all the interaction between the different actors.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;After a couple of days working with the code I got to an acceptable solution, involving a filter, a servlet and a jsp. I decided (more like deciphered, amirite?) the phase in the authentication process in the filter, did the heavy-lifting in the servlet and then provided the view in the jsp. As time went by the solution broke with all the &lt;iframe align=&quot;right&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0470569646&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;changes going on on the FB side of the process so i decided to go through the documentation again and to design a solution flexible enough to withstand the changes and that provided for future tweaking as it evolved. Always keep that in mind in your designs, evolution and change.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The final solution involved just a filter which does all the heavy-lifting and would act as a Facebook client. Now the part you&#39;re looking for is how to organize the workflow. After reading the documentation again I noticed it had changed and it now provided a few hints to common pitfalls (some I found along the way) and I decided to dissect it. A user arrives and it can view your website through the FB canvas or through the regular Internet. The way to know which version the user is currently viewing is to look for the Signed Request parameter. After you know the version then you know how to request for authorization from &lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=144938014X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 235px; padding-right: 10px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;the user to access their information. In the canvas version you can&#39;t simply redirect the user to the authorization screen because the screen is going to be inside an iframe and a bug (hopefully in the future it&#39;ll be solved) prevents the auth prompt from showing up, so I decided to do an ol&#39; &quot;window.top.location=&quot; to redirect the user to the relevant location. This introduces an issue, you need to pass a redirect_uri for the auth prompt to redirect the user after he/she has made the choice to allow us to access (or not) their information. I solved this by appending a &quot;source&quot; parameter at the end of the redirect_uri: source=canvas or source=site.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;In the next section we&#39;ll continue dissecting and solving the small parts involved in integrating a website with the Facebook platform.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;right&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8b.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Continues here...&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);

document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/74187058481562463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/74187058481562463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/74187058481562463'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 8a)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-3131558703471022668</id><published>2010-06-30T18:13:00.006-05:00</published><updated>2012-07-04T16:33:47.927-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 7b)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7a.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Continues from part 7a...&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;We have configured our module to use different locales, but we haven&#39;t tied the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; locale to the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; locale. The &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; locale is specified by a parameter in the request called, surprisingly enough, &quot;&lt;b&gt;&lt;span style=&quot;color: cyan;&quot;&gt;locale&lt;/span&gt;&lt;/b&gt;&quot;. Let&#39;s assume you access your application in your callback address (127.0.0.1 / localhost) through port 8080 in this fashion:&amp;nbsp;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;http&lt;/span&gt;://&lt;span style=&quot;color: #e69138;&quot;&gt;localhost&lt;/span&gt;:&lt;span style=&quot;color: #f1c232;&quot;&gt;8080&lt;/span&gt;/&lt;span style=&quot;color: #6aa84f;&quot;&gt;app&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;You can pass a parameter defining what language to load by appending a &lt;span style=&quot;color: cyan;&quot;&gt;&lt;b&gt;locale&lt;/b&gt;&lt;/span&gt; attribute and the resulting address would be:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;http&lt;/span&gt;://&lt;span style=&quot;color: #e69138;&quot;&gt;localhost&lt;/span&gt;:&lt;span style=&quot;color: #f1c232;&quot;&gt;8080&lt;/span&gt;/&lt;span style=&quot;color: #6aa84f;&quot;&gt;app&lt;/span&gt;?&lt;span style=&quot;color: #3d85c6;&quot;&gt;locale&lt;/span&gt;=&lt;span style=&quot;color: #a64d79;&quot;&gt;en&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Sounds easy, but it&#39;s cumbersome (or not) to pass this parameter in each call. I don&#39;t want to be worrying about this, i just want to configure it and forget about it. So i chose the other option to specify a locale, which is to define it in the &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt;. This sounds dangerous since looks like we&#39;re hard-coding the language into the &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt;, but you can make it dynamic by selecting the language that &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; has detected (and is using).&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;I added this line to my &lt;span style=&quot;color: lime;&quot;&gt;welcomeStruts.jsp&lt;/span&gt; file inside the head:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f6b26b;&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: #c27ba0;&quot;&gt;gwt:property&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #c27ba0;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color: #f6b26b;&quot;&gt;sessionScope&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;org.apache.struts.action.LOCALE&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;]}&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Remember to add the &lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color: #e69138;&quot;&gt;@page&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;isELIgnored&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #a64d79;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; %&amp;lt;&lt;/span&gt; to the &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt; as seen on a previous chapter when we discussed &lt;span style=&quot;color: magenta;&quot;&gt;GAE&lt;/span&gt; quirks if you&#39;re using &lt;span style=&quot;color: magenta;&quot;&gt;Google App Engine&lt;/span&gt; (&lt;span style=&quot;color: magenta;&quot;&gt;GAE&lt;/span&gt;).&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now we&#39;re going to create a sub-interface of the &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt; interface with the same name as our localized properties files. This will help us make the properties files with our translations available to &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;. Create an interface in the same package where your localized properties files are and name it accordingly (with the same name as your localized properties files). In this example the files are named &lt;span style=&quot;color: lime;&quot;&gt;MessageResource[_ll[_CC]].properties&lt;/span&gt; so our interface will be named &lt;span style=&quot;color: cyan;&quot;&gt;MessageResource&lt;/span&gt;. This interface should extend the &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt; interface from the &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; package, be careful not to extend any of the other available &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt; classes or interfaces.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Inside this interface we declare methods to access our &lt;span style=&quot;color: lime;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;value&lt;/span&gt; pairs, and since we made the interface extend &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt;, we can also use the placeholder facility to pass strings which are not to be localized, such as &quot;&lt;span style=&quot;color: #ffd966;&quot;&gt;Welcome {0}!!!&lt;/span&gt;&quot;. If our access method is called &quot;greet&quot; when we call &lt;span style=&quot;color: magenta;&quot;&gt;greet(&quot;Mary&quot;)&lt;/span&gt; the output will be &quot;&lt;span style=&quot;color: #ffd966;&quot;&gt;Welcome Mary!!!&lt;/span&gt;&quot;. In a real application you would do something like &lt;span style=&quot;color: magenta;&quot;&gt;greet(user.getFirstname())&lt;/span&gt;.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;I added 2 &lt;span style=&quot;color: lime;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;value&lt;/span&gt; pairs to each properties file. &lt;span style=&quot;color: lime;&quot;&gt;button.clickme&lt;/span&gt; and &lt;span style=&quot;color: lime;&quot;&gt;label.hellogwt&lt;/span&gt; with the respective translation in each file. In the English file it reads:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;button.clickme&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Click me!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;label.hellogwt&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Hello, GWT!!!&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;And in the Spanish file it reads:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;button.clickme&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Presióname!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;label.hellogwt&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Hola, GWT!!!&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;In the interface i added accessors to those 2 keys by declaring 2 methods:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;* &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;@gwt.key&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;button.clickme&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;* &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;@return&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; the localized click me message&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;*/&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;@Key(&quot;button.clickme&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;public String getClickMe();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;* &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;@gwt.key&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;label.hellogwt&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;* &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;@return&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; the localized hello gwt message&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp;    &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;@Key(&quot;label.hellogwt&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;public String getHelloGWT();&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;right&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7c.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Continues here...&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;color: lime;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below. &lt;br /&gt;
I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/3131558703471022668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7b.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3131558703471022668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3131558703471022668'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7b.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 7b)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-5022580530370518864</id><published>2010-06-30T17:55:00.006-05:00</published><updated>2012-07-04T16:35:05.063-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 7a)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 7: Tying the I18N support from both GWT and Struts.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;We have a working &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; application with regular page navigation, and &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; support, which is also &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; aware. This is important to keep in mind, it&#39;s ONLY &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; aware, in the sense that it knows about different locales. If you access you application from a web browser with an accept-language header different from &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;/b&gt; there are some glitches in the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; display, it doesn&#39;t detect the language &lt;iframe align=&quot;right&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1933988231&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 235px; padding-bottom: 5px; padding-left: 10px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;quite right.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;It uses the &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;/b&gt; locale, which is English. I don&#39;t know if this just happened to myself or if it&#39;s a glitch in general. I will treat it as a general issue, because the fix i propose is also a nice-to-have feature, as usual.&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;I want both my &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; application and my &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; modules to keep in sync of what languages each one of them is using. Since changing the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; language is easier i will make the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; language a slave of the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; language. This is something you would do if you have an existing &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; application to which you just added &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; support. My application in this tutorial is a new application as well, and the steps needed to synchronize both views to the same language requires only a few lines &lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1933988290&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 235px; padding-bottom: 5px; padding-right: 5px; padding-top: 10px; width: 131px;&quot;&gt;&lt;/iframe&gt;of code in the &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt;s, we also need to configure our &lt;span style=&quot;color: lime;&quot;&gt;gwt.xml&lt;/span&gt; file for this module to inherit the &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; classes and finally we&#39;re going to make our message resources available to &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;, just as it is available to &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt;, but with a nice improvement which is provided by the &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; module in &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;In the previous section i mentioned the &lt;span style=&quot;color: cyan;&quot;&gt;Constants&lt;/span&gt; and &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt; interfaces, which provide utilities to internationalize an application. We&#39;re going to build a class that finds our international messages automatically from the given keys. &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; also comes with a command line tool called &lt;span style=&quot;color: magenta;&quot;&gt;i18nCreator&lt;/span&gt; which can help us create this interface for us automatically. I&#39;m gonna do it manually, since the procedure for the &lt;span style=&quot;color: magenta;&quot;&gt;i18nCreator&lt;/span&gt; is pretty straightforward and requires little input. I recommend you &lt;a href=&quot;http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;read about i18n and i18nCreator in the GWT documentation&lt;/span&gt;&lt;/a&gt; and use it as a way to save you both time and patience.&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;I&#39;m assuming our language translations are located in the &lt;span style=&quot;color: lime;&quot;&gt;com.example.strutsgwt.client.i18n&lt;/span&gt; package. Our entry point is located in the &lt;span style=&quot;color: lime;&quot;&gt;com.example.strutsgwt.client&lt;/span&gt; package. Our module &lt;span style=&quot;color: lime;&quot;&gt;gwt.xml&lt;/span&gt; file is located in the &lt;span style=&quot;color: lime;&quot;&gt;com.example.strutsgwt&lt;/span&gt; package. Our &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt;s in the usual location.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The first thing we&#39;re going to do is configure our module&#39;s &lt;span style=&quot;color: lime;&quot;&gt;gwt.xml&lt;/span&gt; file by inheriting the &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; module. &lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B002LYD2LW&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 245px; padding-right: 0px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;To achieve this we&#39;re going to edit it by adding the following after our &lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;module&amp;gt;&lt;/span&gt; tag:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: orange;&quot;&gt;inherits&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;com.google.gwt.i18n.I18N&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now we need to declare the languages we&#39;re going to use, i wish it could be dynamic, and i suspect there&#39;s a way to do it which escapes me, so if anyone knows how, please post below and I&#39;ll add it here (with correct attribution of course). Now I&#39;ll give you an example of the code you need to place inside your gwt.xml file to declare your languages:&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!-- Internationalization support. --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: orange;&quot;&gt;extend-property&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;en&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: orange;&quot;&gt;extend-property&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;es&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: orange;&quot;&gt;set-property-fallback&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;en&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;I&#39;m going to explain these lines and in this way you&#39;re going to adapt it to your case. I declared 2 languages: &lt;span style=&quot;color: magenta;&quot;&gt;en&lt;/span&gt; and &lt;span style=&quot;color: magenta;&quot;&gt;es&lt;/span&gt; (English and Spanish, respectively) and in the last line i declared the &lt;span style=&quot;color: magenta;&quot;&gt;&quot;default&quot;&lt;/span&gt; language, which in this case is &lt;span style=&quot;color: magenta;&quot;&gt;en&lt;/span&gt; (English). You can declare your own languages in this fashion and remember to &lt;a href=&quot;http://code.google.com/webtoolkit/doc/latest/DevGuideI18nLocale.html&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;read the documentation for the GWT locales&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;right&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7b.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Continues here...&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/5022580530370518864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7a.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5022580530370518864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5022580530370518864'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7a.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 7a)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-5417785457948665333</id><published>2010-06-30T17:31:00.057-05:00</published><updated>2012-07-04T16:36:25.599-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 7c)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7b.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Continues from part 7b...&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The annotations tell the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; compiler which method accesses which key. That&#39;s all we need to do to access a key inside the properties file, just add an access method and annotate it.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Finally to test all our configuration we&#39;re going to modify our &lt;span style=&quot;color: cyan;&quot;&gt;EntryPoint&lt;/span&gt; to make use of the internationalized messages by asking &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; to create an implementation of our interface, but don&#39;t worry because all it takes is one line in our &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; code. I declared an attribute in the &lt;span style=&quot;color: cyan;&quot;&gt;EntryPoint&lt;/span&gt; named &lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt; of type &lt;span style=&quot;color: cyan;&quot;&gt;MessageResource&lt;/span&gt; in this way:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: cyan;&quot;&gt;MessageResource&lt;/span&gt; &lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt; = (&lt;span style=&quot;color: cyan;&quot;&gt;MessageResource&lt;/span&gt;) (&lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;.&lt;span style=&quot;color: lime;&quot;&gt;create(&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;MessageResource&lt;/span&gt;.&lt;span style=&quot;color: red;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;)&lt;/span&gt;);&amp;nbsp;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;and now you can use that object to call the appropriate translated message by calling each declared method. In my example i have a label and a button that toggles the label when clicked. I removed the static text from the button and replaced it with &lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt;.&lt;span style=&quot;color: lime;&quot;&gt;getClickMe()&lt;/span&gt; and for the label i did the same with the &lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt;.&lt;span style=&quot;color: lime;&quot;&gt;getHelloGWT()&lt;/span&gt; method. So it should read:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;final &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Label&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;label&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Label(&lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;getHelloGWT()&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;final &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Button(&lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;messageResource&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;getClickMe()&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;That&#39;s how you manage to get the internationalized version of your messages from &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;. There&#39;s just one more thing you need to do to close the circle and that is associate the &lt;span style=&quot;color: cyan;&quot;&gt;locale&lt;/span&gt; parameter to your &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; locale when it&#39;s present, because it takes precedence over the &lt;span style=&quot;color: #93c47d;&quot;&gt;gwt:property&lt;/span&gt; defined in the &lt;span style=&quot;color: blue;&quot;&gt;meta&lt;/span&gt; tag. To do it just place the following code before the &lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;html:html lang=&quot;true&quot;&amp;gt; &lt;/span&gt;tag:&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;logic:present &lt;/span&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;parameter&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #c27ba0;&quot;&gt;locale&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;&amp;nbsp;request.getSession().setAttribute(&lt;/span&gt;&lt;span style=&quot;color: #8e7cc3;&quot;&gt;&quot;org.apache.struts.action.LOCALE&quot;&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Locale(&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;request.getParameter(&lt;/span&gt;&lt;span style=&quot;color: #8e7cc3;&quot;&gt;&quot;locale&quot;&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;/logic:present&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now if the locale parameter is present, then &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; will use that setting and if it&#39;s not present then &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; will use whatever &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; is using. They&#39;re collaborating to present the information in the same way. Now you could create a menu to choose languages using the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; facilty that returns all the available languages (just an idea).&lt;br /&gt;
&lt;br /&gt;
After compiling you should have a perfectly synchronized locale between both &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; and &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; and an easily internationalized application, just drop a new properties file with a new language and declare it in the &lt;span style=&quot;color: lime;&quot;&gt;gwt.xml&lt;/span&gt; file and you&#39;re set. You have access to the message resources from both the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt;&#39; tags and your &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt; interface.&lt;br /&gt;
&lt;br /&gt;
The steps followed in this part of the tutorial are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Configure the module&#39;s &lt;span style=&quot;color: lime;&quot;&gt;gwt.xml&lt;/span&gt; file to use &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;&#39;s &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; support and declare languages.&lt;/li&gt;
&lt;li&gt;Tie &lt;span style=&quot;color: orange;&quot;&gt;Struts&lt;/span&gt;&#39; &lt;span style=&quot;color: #6fa8dc;&quot;&gt;i18n&lt;/span&gt; locale detection and set it as the current &lt;span style=&quot;color: cyan;&quot;&gt;locale&lt;/span&gt; in &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; by editing &lt;span style=&quot;color: yellow;&quot;&gt;JSP&lt;/span&gt;s.&lt;/li&gt;
&lt;li&gt;Create &lt;span style=&quot;color: cyan;&quot;&gt;Messages&lt;/span&gt;, &lt;span style=&quot;color: cyan;&quot;&gt;Contants&lt;/span&gt; or &lt;span style=&quot;color: cyan;&quot;&gt;ConstantsWithLookUp&lt;/span&gt; sub-interfaces for the language properties files.&lt;/li&gt;
&lt;li&gt;Use your interface to access the &lt;span style=&quot;color: lime;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;value&lt;/span&gt; pairs by declaring &lt;span style=&quot;color: lime;&quot;&gt;methods&lt;/span&gt; in it and using &lt;span style=&quot;color: blue;&quot;&gt;@annotations&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below. &lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/5417785457948665333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5417785457948665333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5417785457948665333'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7c.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 7c)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-7477257457894450184</id><published>2010-06-28T15:52:00.008-05:00</published><updated>2012-07-04T16:37:36.665-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 6)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 6: Add I18N support to a Struts 1.x application.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: #f6b26b;&quot;&gt;TL;DR: move the &lt;strong&gt;&lt;span style=&quot;color: yellow;&quot;&gt;MessageResource.properties&lt;/span&gt;&lt;/strong&gt; file(s) to the &lt;strong&gt;&lt;span style=&quot;color: #c27ba0;&quot;&gt;&quot;client&quot;&lt;/span&gt;&lt;/strong&gt; package. I used a package called &quot;&lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt;&quot; inside it, so mine points to:&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;&lt;strong&gt;com.example.strutsgwt.client.i18n.MessageResource&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: #f6b26b;&quot;&gt;also modify &lt;span style=&quot;color: yellow;&quot;&gt;&lt;strong&gt;struts-config.xml&lt;/strong&gt;&lt;/span&gt; to reflect the change.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;You might think this is a joke, because &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; has a very simple and straightforward way to add &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; support. &lt;span style=&quot;color: yellow;&quot;&gt;Netbeans&lt;/span&gt; creates each new  &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; project already having a default properties file (in English) which you can simply copy and rename, adding the appropriate language and country codes to the end, to add a new language to your application. So, is this a joke? No, this is not a joke.&lt;br /&gt;
&lt;br /&gt;
This is a foreword to the &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; support in both &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; and &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; and how they work. The title should read &quot;Adding  &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; support to Struts &lt;span style=&quot;color: cyan;&quot;&gt;in preparation for GWT&lt;/span&gt;&quot;.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Now that we have that clear, we need to know a few things about how &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; and  &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; each handle  &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; support. &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; uses properties files in a &lt;span style=&quot;color: blue;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;value&lt;/span&gt; format for all definitions we may want to have internationalized and you can also put placeholders for any dynamic strings you want to pass &quot;as is&quot; into the internationalized version. &amp;nbsp;&lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; uses 2 interfaces: &lt;b&gt;&lt;span style=&quot;color: #ffe599;&quot;&gt;Constants&lt;/span&gt;&lt;/b&gt; and &lt;b&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;Messages&lt;/span&gt;&lt;/b&gt; (there are other classes too, read the API). The first works just as the &lt;span style=&quot;color: blue;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;value&lt;/span&gt; properties file in &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; and the second works like the &amp;nbsp;&lt;span style=&quot;color: blue;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: lime;&quot;&gt;value&lt;/span&gt; properties with placeholders. They are pretty similar, right? Yes, they are. In fact what we&#39;re going to do is prepare the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; project to accept the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;  &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; out of the box and also from the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; point of view we&#39;re going to use the existing  &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; support already provided by the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; project.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; compiles everything in the &lt;span style=&quot;color: lime;&quot;&gt;&lt;b&gt;&quot;client&quot;&lt;/b&gt;&lt;/span&gt; package into the &lt;span style=&quot;color: #b6d7a8;&quot;&gt;JavaScript&lt;/span&gt; permutations, or so i think (please correct me if i&#39;m wrong in the comment section). Therefore, to be able to use the  &lt;span style=&quot;color: #9fc5e8;&quot;&gt;i18n&lt;/span&gt; properties files from &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; we need to place those files into the  &lt;span style=&quot;color: lime;&quot;&gt;&lt;b&gt;&quot;client&quot;&lt;/b&gt;&lt;/span&gt; package. When you created the &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; project you were asked where to put the resources.&lt;br /&gt;
&lt;br /&gt;
It was something like &lt;span style=&quot;color: orange;&quot;&gt;&lt;b&gt;com.example.strutsgwt.MessageResource&lt;/b&gt;&lt;/span&gt; and you might have changed it a bit. So, now navigate to that package in your source structure.&lt;br /&gt;
&lt;br /&gt;
I&#39;m going to use the following structure to keep things tidy: &lt;span style=&quot;color: orange;&quot;&gt;&lt;b&gt;com.example.strutsgwt.client.i18n&lt;/b&gt;&lt;/span&gt;. So create those packages and place your provided properties files inside.&lt;br /&gt;
&lt;br /&gt;
After you move those files, you need to configure &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; to find them at the new location. You configure &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; to find the location of the message resources file (which i&#39;m calling &lt;span style=&quot;color: yellow;&quot;&gt;MessageResources.properties&lt;/span&gt;) by modifying the &lt;span style=&quot;color: cyan;&quot;&gt;struts-config.xml&lt;/span&gt; file and changing the &amp;lt;message-resources&amp;gt; tag to &lt;span style=&quot;color: orange;&quot;&gt;&amp;lt;message-resources parameter=&quot;com/example/strutsgwt/client/i18n/MessageResources&quot; /&amp;gt;&lt;/span&gt; and check everything works by compiling and testing.&lt;br /&gt;
&lt;br /&gt;
You can then go ahead and add a new language by copying the &lt;span style=&quot;color: yellow;&quot;&gt;MessageResources.properties&lt;/span&gt; file to the same package, renaming that file to &lt;span style=&quot;color: yellow;&quot;&gt;MessageResources_es.properties&lt;/span&gt; or &lt;span style=&quot;color: yellow;&quot;&gt;MessageResources_fr.properties&lt;/span&gt; (or your favorite language code) and modify the contents to the correct translation for each key that is found in the default file.&lt;br /&gt;
&lt;br /&gt;
You should now have a working internationalized &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; web application project which is ready for &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/VlsaB-aPTDQ&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/VlsaB-aPTDQ&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/7477257457894450184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/7477257457894450184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/7477257457894450184'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-6.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 6)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-3385583661419780246</id><published>2010-06-27T19:24:00.024-05:00</published><updated>2012-07-04T16:38:48.340-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 5)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 5: Add GWT support to a Struts 1.x application.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;In the previous parts we&#39;ve configured our environment to work with both &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt;. This part is as short as the last one, we&#39;re going to add &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; support to our &quot;existing&quot; &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; application (which happens to be a new &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; application too) and also make the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; module available to our welcome page.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;To add &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; support to our &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; project we need to right-click the project&#39;s name in the project tab in &lt;span style=&quot;color: cyan;&quot;&gt;Netbeans&lt;/span&gt;, and select &quot;Properties&quot;. In the properties section select &quot;Frameworks&quot; we need to click the &quot;Add&quot; button next to the &quot;Used Frameworks&quot; list and select &lt;span style=&quot;color: orange;&quot;&gt;Google Web Toolkit&lt;/span&gt; from the available frameworks list. Especify the location of the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; SDK and the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; Module name. Things get a lot easier if you expecify the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; Module name &amp;nbsp;to be the same as your &lt;span style=&quot;color: yellow;&quot;&gt;MessageResource&lt;/span&gt; location and adding a dot and the module name in this way: &quot;&lt;span style=&quot;color: lime;&quot;&gt;.&amp;lt;the-module-name-here&amp;gt;&lt;/span&gt;&quot; at the end.&lt;br /&gt;
In our example i chose &lt;span style=&quot;color: magenta;&quot;&gt;&lt;b&gt;com.example.strutsgwt.Welcome&lt;/b&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
After adding the &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; framework to our project, our structure changes to accommodate to the new classes, we get a &lt;b&gt;&quot;client&quot;&lt;/b&gt; package with an EntryPoint subclass inside, a &lt;span style=&quot;color: lime;&quot;&gt;&amp;lt;the-module-name-here&amp;gt;&lt;/span&gt;.gwt.xml module file and a welcome file. We defined our &lt;span style=&quot;color: red;&quot;&gt;Struts&lt;/span&gt; message resources file location to be &lt;span style=&quot;color: magenta;&quot;&gt;com.example.strutsgwt.MessageResource&lt;/span&gt; therefore it can be found inside the &lt;span style=&quot;color: magenta;&quot;&gt;com.example.strutsgwt&lt;/span&gt; package along with the &lt;span style=&quot;color: yellow;&quot;&gt;Welcome.gwt.xml&lt;/span&gt; file. The gwt.xml file has the name of the module, which in our example it would translate to &lt;span style=&quot;color: yellow;&quot;&gt;Welcome.gwt.xml&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s get to the important part, how to add the generated &lt;span style=&quot;color: blue;&quot;&gt;JavaScript&lt;/span&gt; to the pages we want. In the &lt;span style=&quot;color: yellow;&quot;&gt;welcomeGWT.html&lt;/span&gt; file you find along with the welcome files and JSPs there are 2 important lines you need to copy. First there&#39;s a &lt;b&gt;&lt;span style=&quot;color: #b6d7a8;&quot;&gt;meta&lt;/span&gt;&lt;/b&gt; tag with a property &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; understands and then there&#39;s the usual &lt;span style=&quot;color: #b6d7a8;&quot;&gt;&lt;b&gt;script&lt;/b&gt;&lt;/span&gt; tag with the location of the EntryPoint. We are going to copy those 2 lines from the &lt;span style=&quot;color: yellow;&quot;&gt;welcomeGWT.html&lt;/span&gt; file to the &lt;span style=&quot;color: yellow;&quot;&gt;welcomeStruts.jsp&lt;/span&gt; file. I placed the 2 lines inside the head section of the JSP file.&lt;br /&gt;
&lt;br /&gt;
You can now compile everything and test it. &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; compiles your &lt;span style=&quot;color: red;&quot;&gt;Java&lt;/span&gt; code into &lt;span style=&quot;color: blue;&quot;&gt;JavaScript&lt;/span&gt; code so the compilation is a bit long and you might want to get used to this coding philosophy: use &lt;span style=&quot;color: #6aa84f;&quot;&gt;Hosted Mode&lt;/span&gt; for &lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt; testing, make changes and refresh the page while using hosted mode. I use &lt;span style=&quot;color: #6aa84f;&quot;&gt;Hosted Mode&lt;/span&gt; for the client (&lt;span style=&quot;color: orange;&quot;&gt;GWT&lt;/span&gt;) and i like compiling everything every now and then to check the whole project. Find your own pace.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/100T13qLqxI&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/100T13qLqxI&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/3385583661419780246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3385583661419780246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/3385583661419780246'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-5.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 5)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-5005962839791507501</id><published>2010-06-26T01:30:00.015-05:00</published><updated>2012-07-04T16:39:40.850-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 4)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 4: Create a simple Struts 1.x application.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: #f9cb9c;&quot;&gt;TL;DR: Scroll down to the video.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;This is a straightforward task. Simply open Netbeans, if it&#39;s not already opened, click &quot;File&quot; and then select &quot;New Project&quot; or alternatively you could Click on the &lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1847195466&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 245px; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;&quot;New Project&quot; icon on the toolbar. After selecting &quot;New Project&quot;, choose the &quot;Java Web&quot; category and then the &quot;Web Application&quot; project type. In the &quot;New Web Application&quot; wizard fill-in the information, such as the project name and click &quot;next&quot;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;I am using Google App Engine (GAE) as a web server but you can choose any servlet container you like, such as Apache Tomcat or Sun Glassfish, which come bundled with Netbeans. If you&#39;re using GAE as the server, and you haven&#39;t added it to your services (i.e. it&#39;s not selectable in the drop-down menu), click the &quot;Add&quot; button. Select &quot;Google App Engine&quot; from the &lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0470464933&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;float: left; height: 245px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;server selection list and click &quot;next&quot;. In the location, point to the easy-to-find location where you saved and unpacked the GAE SDK. Configure the properties and click &quot;finish&quot;. Now you can use the GAE development server to develop web applications for the Google App Engine cloud server.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;After selecting the server for your new web application, click &quot;next&quot; and head to the frameworks section and check the &quot;Struts&quot; framework, don&#39;t worry if your application will have i18n support because we will deal with those specific details in the following parts of the tutorial, now&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt; check the &lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0072263865&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: right; float: right; height: 245px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;&quot;Add Struts TLDs&quot; check-box and click &quot;finish&quot;. If you noticed we didn&#39;t add GWT support to the web application, although it was available from the frameworks menu. This was done intentionally to create the Struts file structure first and to configure it the way you would normally do when starting a new web application using Struts. We&#39;ll worry about GWT later, because what we just did also allows you to follow the next parts of the tutorial and apply GWT support to an existing Struts 1.x web application without having to rewrite or manually create the required file structure.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zDsc5n0eMEw&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/zDsc5n0eMEw&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;The music clips are here on the left, just in case you feel like listening to something while you read.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;GAE quirks&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;So, we now have a new web application project with Struts support that should work in GAE (or maybe not). Except that sessions are not ON by default, so we need to modify &lt;span style=&quot;color: cyan;&quot;&gt;appengine-web-xml&lt;/span&gt; to enable sessions using the Netbeans editor by clicking the &quot;&lt;span style=&quot;color: yellow;&quot;&gt;Enable Support for Servlet Sessions&lt;/span&gt;&quot; check-box or by adding this &lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&amp;lt;sessions-enabled&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;span style=&quot;color: magenta;&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: cyan;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;/sessions-enabled&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt; inside the root. What next? Ok, we need to adjust a few things according to the &lt;a href=&quot;http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;&quot;Will it play in App Engine&quot;&lt;/span&gt;&lt;/a&gt; page. In that page it says:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;quote&gt;&lt;i&gt;&lt;span style=&quot;color: #f9cb9c;&quot;&gt;JSP session beans are not supported; to enable EL parsing, add &amp;lt;% @page isElIgnored=&quot;false&quot; %&amp;gt; to your JSPs and &amp;lt;%@tag isElIgnored=&quot;false&quot; %&amp;gt; to your tag files.&lt;/span&gt;&lt;/i&gt;&lt;/quote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;So, how do we make session beans available to JSPs? We need to make them available through &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/java/memcache/&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;memcache&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt; using the persistence provided by GAE (they need to make a buck somewhere around here). I found &lt;a href=&quot;http://h2g2java.blessedgeek.com/2009/08/using-memcache-for-session-beans-in-gae.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;this technique&lt;/span&gt;&lt;/a&gt; running around in the wilderness of the interwebs, but i think the low-level API gives you more control, the choice is up to you. So for now we&#39;re covered and we can pretend we can use session beans in JSP, provided we only store Serializable objects in which all the important attributes are Serializable as well&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;Now we adress the other issue; EL parsing. In every page we create we need to insert the &amp;lt;%@page isELIgnored=&quot;false&quot;%&amp;gt; directive to be able to use EL (expression language) inside our JSPs. Problem solved.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/5005962839791507501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5005962839791507501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/5005962839791507501'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-4.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 4)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-633092783451796132</id><published>2010-06-25T20:51:00.019-05:00</published><updated>2012-07-04T16:40:40.814-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 3)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 3: Add the Google Web Toolkit framework to Netbeans.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #f9cb9c;&quot;&gt;TL;DR: It&#39;s nice to have regular page navigation and GWT features together. Scroll down to the red link.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The Google Web Toolkit (from now on GWT) is a framework that allows you to write your user interface (from now on Client) in the Java programming language and then does a cross-compilation into JavaScript. What it means is that you can create your user interface as you would do in a Swing style application and the framework translates that into the native user interface for each web browser supported (e.g. in Opera, Safari, Internet Explorer, Firefox a GWT button is a real BUTTON element in HTML so the native rendering is preferred on top of a virtual widget that behaves like a button like a DIV with an &quot;onclick&quot; method defined or other combinations of elements).&lt;br /&gt;
&lt;br /&gt;
It comes with a few command-line tools such as the webAppCreator and the i18nCreator which let&#39;s you kick-start any project with GWT support and add I18N support to a new or existing project, respectively. It has a nice feature called Hosted Mode which let&#39;s you debug and test your code against a browser of your choice by installing a plug-in to said browser (as of now it supports Apple Safari, Microsoft Internet Explorer, Mozilla Firefox and obviously Google Chrome). Sadly it doesn&#39;t support Opera (doesn&#39;t have a plug-in &lt;span style=&quot;color: cyan;&quot;&gt;yet&lt;/span&gt;). I test in Opera and other browsers, but the process of changing or adding a few lines of code and then firing up 5 browsers is a time-consuming and resource-wasting task. I have my personal philosophy in which i test the development code in IE (the most problematic from my point of view) and then rely on the capabilities of GWT to behave consistently in the same way across all other browsers.&lt;br /&gt;
&lt;br /&gt;
GWT lets you harness the capabilities of AJAX in a simple and elegant way. Once you know how to create services and implement them, it becomes a real time-saver when it comes to changing just a small portion of the Client or even uploading the files The Google Way. I like having options and i like having the ability of changing just a small part of a web page or completely&lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0125184069&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt; forwarding or redirecting the Client to another view. I&#39;ve seen whole applications that behave like desktop applications and although it can be a nice way to present your layout, it can also be mind-boggling to the regular novice user. &lt;span style=&quot;color: orange;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;&lt;b&gt;Usability Engineering Principles by Jakob Nielsen&lt;/b&gt;&lt;/span&gt; (pictured) is a nice lecture on this topic. Users feel somewhat safe with what they currently use, so the change to a full desktop-like application inside a web browser should not make them feel like they&#39;re learning anything. A normal user can remember 7 items in average, but when they feel they&#39;re learning they reset the counter to make room for the new information.&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;Enough chit-chat, let&#39;s focus on our topic and let&#39;s add the GWT framework to Netbeans. &amp;nbsp;&lt;/div&gt;&lt;ol align=&quot;left&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://code.google.com/webtoolkit/gettingstarted.html&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Download the GWT SDK here&lt;/span&gt;&lt;/a&gt; and save it to an easy-to-find location as usual.&lt;/li&gt;
&lt;li&gt;Unpack the file using your favorite utility (7zip).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Open Netbeans and click on &quot;Tools&quot; on the menubar.&lt;/li&gt;
&lt;li&gt;Select &quot;Plugins&quot; and the plug-in dialog opens.&lt;/li&gt;
&lt;li&gt;Click on &quot;Available plugins&quot; tab.&lt;/li&gt;
&lt;li&gt;On the Search box type &quot;GWT4NB&quot;.&lt;/li&gt;
&lt;li&gt;Check the check-box of the plug-in named GWT4NB.&lt;/li&gt;
&lt;li&gt;Click the &quot;Install&quot; button at the bottom.&lt;/li&gt;
&lt;/ol&gt;&lt;div align=&quot;center&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8mtwa0Y4MJY&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/8mtwa0Y4MJY&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
After installing the plugin you will have the option of adding GWT framework support to your new or existing Java Web applications. When you choose to add the GWT support to the application you will be prompted to enter the location of the GWT SDK which you downloaded earlier (and which you unpacked to an easy-to-find location, remember?).&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;That&#39;s all there is to installing the GWT framework to Netbeans.&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for systems integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/633092783451796132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/633092783451796132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/633092783451796132'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-3.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 3)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-7737782772860722179</id><published>2010-06-24T21:13:00.016-05:00</published><updated>2012-07-04T16:41:35.121-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 2)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;Part 2: Add the Struts framework to Netbeans.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;The &lt;a href=&quot;http://struts.apache.org/&quot;&gt;&lt;span style=&quot;color: cyan;&quot;&gt;&lt;b&gt;Struts&lt;/b&gt;&lt;/span&gt;&lt;/a&gt; 1.x framework is a well-tested, well-documented, mature, popular MVC framework and many developers are familiar with it. It has pros and cons just as any other framework. There are other frameworks that compete with Struts, you can find &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Struts#Competing_MVC_frameworks&quot;&gt;&lt;span style=&quot;color: #ffe599;&quot;&gt;&lt;b&gt;more info here&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;. I chose it for this tutorial for it&#39;s simplicity and because it&#39;s a framework that&#39;s been around for over 10 years. It&#39;s not the only one but the features are good, it helps you keep your code tidy and it also provides a few features to avoid boilerplate code, like a choice of automatic server-side validation versus automatic client-side validation in JavaScript and so on.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Assuming the framework is not installed or activated on your Netbeans installation. The procedure to activate it is simple, just click on &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&lt;span style=&quot;color: white;&quot;&gt;&quot;Tools&quot;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; and then &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Plugins&quot;&lt;/span&gt;&lt;/b&gt;. On the plugins dialog, select the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Available plugins&quot;&lt;/span&gt;&lt;/b&gt; tab and type &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Struts&quot;&lt;/span&gt;&lt;/b&gt; in the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;Search&lt;/span&gt;&lt;/b&gt; box in the upper right-hand side of the dialog. If it appears on the result catalog, click the check-box beside it and at the bottom left-hand side of the dialog click the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Install&quot;&lt;/span&gt;&lt;/b&gt; button.&amp;nbsp;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;If it didn&#39;t appear in the results catalog then switch to the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Installed&quot;&lt;/span&gt;&lt;/b&gt; tab and type &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Struts&quot;&lt;/span&gt;&lt;/b&gt; in the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;Search&lt;/span&gt;&lt;/b&gt; box in the upper right-hand side of the dialog. You should see it in the results catalog. You can check if it&#39;s active by looking for a &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f3f3f3;&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt;green tick&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; on the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Active&quot;&lt;/span&gt;&lt;/b&gt; column at the right side of the listing. If it&#39;s not active, click the check-box beside the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;Struts&lt;/span&gt;&lt;/b&gt; listing and look for the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Activate&quot;&lt;/span&gt;&lt;/b&gt; button on the lower left-hand side of the dialog.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;After it&#39;s installed and activated you&#39;ll be able to select it from the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;Frameworks list&lt;/span&gt;&lt;/b&gt; when you create a new &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;Java Web&lt;/span&gt;&lt;/b&gt; project from the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;New Project Wizard&lt;/span&gt;&lt;/b&gt; or add &lt;span style=&quot;background-color: blue;&quot;&gt;&lt;b&gt;Struts&lt;/b&gt;&lt;/span&gt; support to an existing project by right-clicking the project, then clicking on &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;/b&gt; and selecting it from the &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Frameworks&quot;&lt;/span&gt;&lt;/b&gt; menu in the project&#39;s property dialog.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/__Dx41l1fGk&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/__Dx41l1fGk&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/7737782772860722179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/7737782772860722179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/7737782772860722179'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-2.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 2)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-980267668956012162</id><published>2010-06-22T04:56:00.036-05:00</published><updated>2012-07-04T16:42:21.061-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Part 1)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;Part 1: Add the Google App Engine server to Netbeans&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;TL;DR: Copy this &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;http://kenai.com/projects/nbappengine/downloads/download/Latest_NetBeans68/updates.xml&lt;/b&gt;&lt;/span&gt; and watch video below.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;When I added the Google App Engine Development Server to my Netbeans IDE I had a little trouble and I&#39;m not sure what was causing the problem, perhaps the JSF2.0 (Mojarra i think) didn&#39;t like the new server.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;I absolutely dislike Eclipse IDE, but that&#39;s just my personal opinion. After playing with Netbeans 6.9 beta and Netbeans 6.9, I decided to switch back to Netbeans 6.8 because I wanted to test a few ideas to see if they worked on GAE (Google App Engine). I wanted to use JSF2.0 and GWT to compare the AJAX functionalities that both frameworks have.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;I got disappointed of all te configurations you have to make to get JSF2.0 working on Google App Engine, so i changed to a well-tested and simple (from a newbie perspective) MVC framework: Struts 1.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;If you want to comment on the advantages and disadvantages you see between your choice or flavor of MVC and those of Struts then use the comments section below.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;I re-installed &lt;a href=&quot;http://netbeans.org/community/releases/68/&quot;&gt;&lt;span style=&quot;color: cyan;&quot;&gt;Netbeans 6.8&lt;/span&gt;&lt;/a&gt; which I have been using at work since it came out in December and I&#39;m quite pleased. I would recommend you stay away from Netbeans 6.9 at least until September, to give it time to settle, because i think the new features still need a little more testing, but i could be wrong.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;After installing Netbeans 6.8 we need to add the Google App Engine Server. &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&lt;a href=&quot;http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Java&quot;&gt;&lt;span style=&quot;color: cyan;&quot;&gt;&lt;b&gt;Download the App Engine SDK here&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt; and store it in an &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;easy-to-find &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;location. You will need to tell the plug-in where to find the library for the App Engine SDK. We will install the App Engine update center from the &lt;b&gt;&lt;span style=&quot;background-color: cyan;&quot;&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Plugins&quot;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; option in the &lt;/span&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;&quot;&lt;b&gt;Tools&lt;/b&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt; menu.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;After selecting &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Plugins&quot;&lt;/span&gt;&lt;/b&gt;, click on &lt;span style=&quot;background-color: blue;&quot;&gt;&lt;b&gt;&quot;Settings&quot;&lt;/b&gt;&lt;/span&gt; and then look for a button that reads &lt;b&gt;&lt;span style=&quot;background-color: blue;&quot;&gt;&quot;Add&quot;&lt;/span&gt;&lt;/b&gt; on the lower right-hand corner of the plug-ins dialog. When you click the &lt;span style=&quot;background-color: blue;&quot;&gt;&lt;b&gt;&quot;Add&quot;&lt;/b&gt;&lt;/span&gt; button you&#39;re presented with a dialog to add a new update center in which you&#39;re going to enter the following:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;Name: &lt;span style=&quot;color: lime;&quot;&gt;&lt;b&gt;App Engine&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;&quot;&gt;URL: &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;http://kenai.com/projects/nbappengine/downloads/download/Latest_NetBeans68/updates.xml&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/rV3mVW0y2iU&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/rV3mVW0y2iU&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;After you have added the update center, then go to the &quot;Available plug-ins&quot; tab and on the Search box type &quot;App Engine&quot; you will see several plug-ins, check all their check-boxes and click &quot;Install&quot;. Now you can use Google App Engine as a container for any of your web applications.&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);

document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/980267668956012162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/980267668956012162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/980267668956012162'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-1.html' title='GWT + Struts 1.x + Netbeans Tutorial (Part 1)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-260637781938079119</id><published>2010-06-21T21:29:00.108-05:00</published><updated>2012-07-04T16:43:04.543-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="framework"/><category scheme="http://www.blogger.com/atom/ns#" term="GAE"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="Struts"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>GWT + Struts 1.x + Netbeans Tutorial (Intro)</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href=&quot;https://www.odesk.com/users/~~ad3ebeae3f89ee59&quot;&gt;&lt;img alt=&quot;oDesk Certified Java Developer&quot; src=&quot;https://www.odesk.com/api/exams/v1/4895629/image&quot; /&gt;&lt;/a&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;Is it true you&#39;re having trouble adding &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;&lt;span style=&quot;color: cyan;&quot;&gt;&lt;b&gt;GWT&lt;/b&gt;&lt;/span&gt;&lt;/a&gt; support to a new (or existing) &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;Struts 1.x&lt;/b&gt;&lt;/span&gt; web application developed in &lt;a href=&quot;http://www.netbeans.org/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&lt;b&gt;Netbeans&lt;/b&gt;&lt;/span&gt;&lt;/a&gt; (or not) and possibly to be deployed in &lt;b&gt;&lt;span style=&quot;color: #66ff99;&quot;&gt;&lt;a href=&quot;http://www.google.com/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #000099;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #ff9900;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #000099;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #33cc00;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;e&lt;/span&gt;&lt;/a&gt; App Engine&lt;/span&gt;&lt;/b&gt; (or another &lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;JSP&lt;/b&gt;&lt;/span&gt; container like &lt;span style=&quot;color: orange;&quot;&gt;&lt;b&gt;Tomcat&lt;/b&gt;&lt;/span&gt;)?&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;I&#39;ll be adding the steps pointed below, subscribe to the RSS feed to get a notification whenever i post a new step.&amp;nbsp;You&#39;ll find this tutorial a little different, since i don&#39;t use (or like using) any other libraries. You&#39;ll find the source code in the sources part of the tutorial.&lt;/div&gt;&lt;br /&gt;
The tutorial walks you through the whole process in small steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-1.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Add the Google App Engine Server to Netbeans.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-2.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Add the Struts framework to Netbeans.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-3.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Add the GWT framework to Netbeans.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-4.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Create a simple Struts 1.x application.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-5.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Add GWT support to a Struts 1.x application.&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-6.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Add I18N support to a Struts 1.x application.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-part-7a.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Tie the I18N support from both GWT and Struts.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/11/gwt-struts-1x-netbeans-tutorial-part-8.html&quot;&gt;&lt;span style=&quot;color: orange;&quot;&gt;Facebook Authentication (Canvas + Web Application)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leveraging Struts and GWT, (DevServer / HostedMode) when to use which.&lt;/li&gt;
&lt;li&gt;Add a new workflow using Struts.&lt;/li&gt;
&lt;li&gt;Add a new module using GWT.&lt;/li&gt;
&lt;li&gt;Source code. Where to go next.&lt;/li&gt;
&lt;/ol&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/260637781938079119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-intro.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/260637781938079119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/260637781938079119'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/gwt-struts-1x-netbeans-tutorial-intro.html' title='GWT + Struts 1.x + Netbeans Tutorial (Intro)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-986683775576734458</id><published>2010-06-19T18:34:00.040-05:00</published><updated>2010-06-26T06:12:25.761-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="User Javascript Opera configure configuration &quot;user javascript&quot;"/><title type='text'>Configure Opera&#39;s User Javascript Feature</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;     &amp;lt;/c:when&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;     &amp;lt;c:otherwise&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;     &amp;lt;/c:otherwise&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;hr /&gt;Here&#39;s a small walk-through for configuring User Javascript in Opera. These are simple steps to get to the point.&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;color: red;&quot;&gt;Step 1&lt;/span&gt;: Open Opera and point it to the address &quot;opera:config&quot; (no quotes).&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Step 2&lt;/span&gt;: Type &quot;User Javascript&quot; (no quotes) in the search box.&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Step 3&lt;/span&gt;: There are 4 features you can configure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVNCvIWFmJH942i0h8fdwlH-P4RLlhlEEFlzlMy6MWWNtAqwnFTzKmYiJX6mcoMcoPmAPoo99WpMN3bgR1FW2zve9mtQoP6iOaTNR29EEYAfW1j9YxlvBOP9_AKmQ84G_tpJHXyOixtuE/s1600/configureUserJS.PNG&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5484633633289279762&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVNCvIWFmJH942i0h8fdwlH-P4RLlhlEEFlzlMy6MWWNtAqwnFTzKmYiJX6mcoMcoPmAPoo99WpMN3bgR1FW2zve9mtQoP6iOaTNR29EEYAfW1j9YxlvBOP9_AKmQ84G_tpJHXyOixtuE/s320/configureUserJS.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 176px; margin: 0px auto 10px; text-align: center; width: 320px;&quot; /&gt;&lt;/a&gt;Click the image to enlarge it.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Step 4&lt;/span&gt;: The &quot;User Javascript File&quot; textfield is where you need to enter the location of the folder where you will store your UserJS files. I created a folder called UserJS on my desktop folder and pointed to it. In Windows it would be something like &quot;&lt;span style=&quot;color: #3366ff;&quot;&gt;C:\Documents and Settings\Luis Daniel\Desktop\UserJS\&lt;/span&gt;&quot; and for Apple Mac users it would be something like &quot;&lt;span style=&quot;color: #3366ff;&quot;&gt;/Users/Luis Daniel/Desktop/UserJS/&lt;/span&gt;&quot; changing the username for yours (or the appropriate one).&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Step 5&lt;/span&gt;: Save.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Step 6&lt;/span&gt;: Enjoy!&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;After configuring User Javascript you might want to &lt;b&gt;&lt;a href=&quot;http://codeherding.blogspot.com/2010/06/youtube-message-count-bug-fix-feature.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;check this post that gives you a User Javascript file to use it to add a new feature to YouTube&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;, it&#39;s simple and well done.&lt;/div&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below. &lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/986683775576734458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/configure-operas-user-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/986683775576734458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/986683775576734458'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/configure-operas-user-javascript.html' title='Configure Opera&#39;s User Javascript Feature'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4038066669955738165.post-1747429227340270724</id><published>2010-06-19T16:54:00.116-05:00</published><updated>2010-07-08T06:35:34.347-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="User Javascript Opera Safari Firefox YouTube &quot;Mark as Read&quot; Inbox Message Count Feature"/><title type='text'>Fix YouTube Message Count Bug / Add &#39;Mark As Read&#39; Feature To YouTube Inbox</title><content type='html'>&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;toplike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s1600/codeherding.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s200/codeherding.PNG&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;&amp;lt;c:choose&amp;gt;
     &amp;lt;c:when &lt;span style=&quot;color: red;&quot;&gt;test=&quot;&lt;span style=&quot;color: #cc66cc;&quot;&gt;${user.likes}&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;         &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:when&amp;gt;
     &amp;lt;c:otherwise&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style=&quot;color: #99ffff;&quot;&gt;          &lt;/span&gt;&lt;a href=&quot;mailto:luisdanielmesa@gmail.com?subject=Code%20Herding&amp;amp;body=Hi,%20I%20think%20the%20blog%20you%20posted%20about%20%3Cthe%20subject%20here%3E%20is%20%3Cadjetive%20here%3E.%0A%0AThanks.&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Send me feedback.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;color: #99ffff;&quot;&gt;
     &amp;lt;/c:otherwise&amp;gt;
&amp;lt;:choose&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;div align=&quot;justify&quot;&gt;I use &lt;b&gt;&lt;a href=&quot;http://www.opera.com/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Opera&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; for everything. I use it to browse and check my email, etc. and having said that i want to introduce you to a nice feature called &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;. It can be used in &lt;a href=&quot;http://www.google.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000099;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #ff9900;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #000099;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #33cc00;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;e&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; &lt;a href=&quot;http://www.google.com/chrome&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Chrome&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; (although it becomes unstable as seen from &lt;a href=&quot;http://lifehacker.com/5180010/enable-user-scripts-in-google-chrome&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;this post&lt;/span&gt;&lt;/a&gt;) and in &lt;b&gt;&lt;a href=&quot;http://www.mozilla.com/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Mozilla Firefox&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; (although you need the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/748/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;greasemonkey plugin&lt;/span&gt;&lt;/a&gt;). In &lt;b&gt;&lt;a href=&quot;http://www.opera.com/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Opera&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; it works out of the box and without any inconvenience or without needing to install any plugin. If you already use it, then you know it can help you fix bugs in websites. If you don&#39;t know how to configure it you can &lt;a href=&quot;http://codeherding.blogspot.com/2010/06/configure-operas-user-javascript.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #66ffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;check this post which opens in a new tab&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/a&gt; and learn how to configure it. I use one to prevent &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; from asking me to update my flash plugin (i think it&#39;s fixed now) or even changing the layout of some websites. I found the plugin update &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; file fix in the help forum at &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; and the layout configuration i found it on a userscript site. So after i ran into another bug in the &amp;nbsp;&lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; website code i decided to make my own fix for it.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;A brief background, I just ran into trouble while checking my inbox and the message numbers are wrong, the read messages are marked as unread and that bugs me. Whenever i&#39;m on the homepage i see an erroneous message count and i&#39;m misguided to think i have new messages. &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; has bugs just as any other software project and it has been pointed to them in the Help Forums in threads like &lt;a href=&quot;http://www.google.com/support/forum/p/youtube/thread?tid=5ca7dc72b86b7a00&amp;amp;hl=en&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;this one&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; or &lt;a href=&quot;http://www.google.com/support/forum/p/youtube/thread?tid=0e6399593ef0d3ac&amp;amp;hl=en&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;this one&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;. To fix that i added a &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; to add a feature to my Inbox to explicitly mark the messages i choose as read and also clear the cache and message counts. Once you click the message a &quot;Mark as read&quot; button shows up, it has the same style as other buttons in the &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; layout so it blends quite well with the UI.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The regular &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; Inbox Layout looks like this:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuL_1ruyWXFHZOTaHduYmOfkyXeYCNhXnXhCUBB2BfrhiqM-tR-jRHJl7vehDhJpp6CyrssW-87lxKv_4sg2fnJYZla6Ahye_-pvPB2RobWF5CcVJtXXgBqii9lr4OhAAPQxjErysGle8/s1600/YT+Old+Feature.PNG&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5484620579882726082&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuL_1ruyWXFHZOTaHduYmOfkyXeYCNhXnXhCUBB2BfrhiqM-tR-jRHJl7vehDhJpp6CyrssW-87lxKv_4sg2fnJYZla6Ahye_-pvPB2RobWF5CcVJtXXgBqii9lr4OhAAPQxjErysGle8/s320/YT+Old+Feature.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 116px; margin: 0px auto 10px; text-align: center; width: 320px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;Click to enlarge&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;/div&gt;After the &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; runs, it looks like this:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7wS9M_Awnf9SQP14FzQQ0dg6Hb-khmDzCznDMSxnxyhWQNPe9pxmY2AJ7AVM-cKJBct4_0FMRPoFM2WWGdvZzNmniIWW94w3ecXBHI0Ckzn16KVno24hDuhavp3hI8jhHECYBcqPXTw8/s1600/YT+New+Feature.PNG&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5484620594530076754&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7wS9M_Awnf9SQP14FzQQ0dg6Hb-khmDzCznDMSxnxyhWQNPe9pxmY2AJ7AVM-cKJBct4_0FMRPoFM2WWGdvZzNmniIWW94w3ecXBHI0Ckzn16KVno24hDuhavp3hI8jhHECYBcqPXTw8/s320/YT+New+Feature.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 116px; margin: 0px auto 10px; text-align: center; width: 320px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;Click to enlarge&lt;/div&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Notice the new &quot;&lt;span style=&quot;background-color: #9fc5e8;&quot;&gt;Mark as read&lt;/span&gt;&quot; button next to the delete button. It uses the &quot;native&quot; JavaScript from &lt;a href=&quot;http://www.google.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000099;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #ff9900;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #000099;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #33cc00;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;e&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; (&lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;) so all the changes are sent back to their server and you can rest assured you won&#39;t have the issue again. It also works for selected messages / all messages, so it&#39;s integrated with it as a native feature. Give the file a spin and let me know if you like it by sending me a message or sharing it with others.&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;If you have your own &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; files you want to share let me know and i&#39;ll post a link over here.&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;&lt;iframe align=&quot;left&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=codeh0d-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596101651&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;&quot;&gt;&lt;/iframe&gt;Here&#39;s the &lt;span style=&quot;color: #999999;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;a href=&quot;http://mail.itelcel.com/FileCabinet/Download.asp?User=luismesa@itelcel.com&amp;amp;app=web&amp;amp;FID=E9DAAF56-3C8E-4C0F-8C06-87194912D8CB&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;strike&gt;First user Javascript Inbox Count Fix file&lt;/strike&gt; (now old)&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;, it&#39;s 2KB in size, just place it in your &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; folder, reload &lt;a href=&quot;http://www.youtube.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;Tube&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; and go into your inbox.&lt;br /&gt;
I made a brand &lt;a href=&quot;http://mail.itelcel.com/FileCabinet/Download.asp?User=luismesa@itelcel.com&amp;amp;app=web&amp;amp;FID=55A37D1A-9088-4E11-A3DF-A6DBB4AC9FF7&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #33ff33;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;new &lt;b&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;Greasemonkey&lt;/span&gt;&lt;/b&gt; version for everyone&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; using &lt;b&gt;&lt;span style=&quot;color: #ffd966;&quot;&gt;Firefox&lt;/span&gt;&lt;/b&gt;, &lt;span style=&quot;color: #6fa8dc;&quot;&gt;Chrome&lt;/span&gt;, &lt;span style=&quot;color: #8e7cc3;&quot;&gt;Safari&lt;/span&gt; and even &lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;Opera&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;Opera&lt;/b&gt;&lt;/span&gt; accepts both the &lt;b&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;Greasemonkey&lt;/span&gt;&lt;/b&gt; scripts and &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; files, so this file is universal.&lt;br /&gt;
I also made a &lt;a href=&quot;http://mail.itelcel.com/FileCabinet/Download.asp?User=luismesa@itelcel.com&amp;amp;app=web&amp;amp;FID=ACE01ADC-F902-4BBF-BD58-0F591019C2D6&quot;&gt;&lt;span style=&quot;color: #33ff33;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;u&gt;new &lt;span style=&quot;color: #cc0000;&quot;&gt;Opera&lt;/span&gt; version of this script&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; too (just to keep two copies) which is exactly the same as the &lt;span style=&quot;color: #3d85c6;&quot;&gt;Greasemonkey&lt;/span&gt; version but adapted to &lt;span style=&quot;color: #cc0000;&quot;&gt;Opera&#39;s&lt;/span&gt; &lt;b&gt;&lt;a href=&quot;http://www.opera.com/docs/userjs/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: #ffcc66;&quot;&gt;User Javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;. As soon as you enter your inbox the feature will activate itself.&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;justify&quot;&gt;Whenever you use the feature a confirmation box will appear asking you if you really want to mark the selected messages as read, so no need to worry about making mistakes.&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: #cc9933;&quot;&gt;What you could do before using the script:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Inbox, Personal messages, Shared with you, Comments&lt;/span&gt;: Read, Delete.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Friend invites, Video responses&lt;/span&gt;: Approve, Ignore.&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;color: #cc9933;&quot;&gt;&lt;b&gt;What you can do after using the script:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Inbox, Personal messages, Shared with you, Comments&lt;/span&gt; : Read, Delete, &lt;b&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;Mark as read&lt;/span&gt;&lt;/b&gt; (without bothering to read them).&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ccffff;&quot;&gt;Friend invites, Video responses&lt;/span&gt;: Approve, Ignore, &lt;b&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;Mark as read&lt;/span&gt;&lt;/b&gt; (without having to decide then and there).&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s1600/code.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0VfxRZ629MghIYvP4R3tGhwazG5sIzkubbC_yMYGKTAl8dplz3RrWcLtIfxIIHoC1pr2Ztl9ekXrx0JabczyOsAI9IQQ4P80cGvEVrYvSYiw9KgJ-CVdERLvckUHJvpBIAz9cQb2wnM/s200/code.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you have any suggestions, ideas for full blown system integration (sb) or comments, leave a message below.&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;&lt;br /&gt;
&lt;/div&gt;I would appreciate if you could &lt;a href=&quot;http://www.facebook.com/sharer.php&quot; name=&quot;fb_share&quot; type=&quot;button_count&quot;&gt;Share this with your friends&lt;/a&gt;&lt;script src=&quot;http://static.ak.fbcdn.net/connect.php/js/FB.Share&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; id=&quot;bottomlike&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcodeherding.blogspot.com%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&quot; style=&quot;border: none; height: 80px; overflow: hidden; width: 476px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;script type=&quot;text/javascript&quot;&gt;
document.getElementById(&quot;bottomlike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
document.getElementById(&quot;toplike&quot;).setAttribute(&quot;src&quot;, &#39;http://www.facebook.com/plugins/like.php?href=&#39;+encodeURIComponent(window.location)+&#39;&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=476&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=dark&amp;amp;height=80&#39;);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeherding.blogspot.com/feeds/1747429227340270724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codeherding.blogspot.com/2010/06/youtube-message-count-bug-fix-feature.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/1747429227340270724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4038066669955738165/posts/default/1747429227340270724'/><link rel='alternate' type='text/html' href='http://codeherding.blogspot.com/2010/06/youtube-message-count-bug-fix-feature.html' title='Fix YouTube Message Count Bug / Add &#39;Mark As Read&#39; Feature To YouTube Inbox'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD1VZZLGZHkgnGCiZkBdXdt0CjNDzzjIk4uHLvACAg_L8sprVu4PgdXob9kSKhzr2GFjKclwptMUHN1kT-Niw2ki0JBUBqEkMNpERLZxgald7mpzFgHEWhmw93CGVKoZ1iZx8zVrFiJUo/s72-c/codeherding.PNG" height="72" width="72"/><thr:total>1</thr:total></entry></feed>