<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Kaptain on ... stuff &#187; Facelets</title>
	<atom:link href="http://www.kellyrob99.com/blog/tag/facelets/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kellyrob99.com/blog</link>
	<description>Tales of development, life and the folly that goes along with both</description>
	<lastBuildDate>Sun, 04 Dec 2011 21:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>StreamingMarkupBuilder for Groovy-er xml</title>
		<link>http://www.kellyrob99.com/blog/2009/07/26/streamingmarkupbuilder-for-groovy-er-xml/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=streamingmarkupbuilder-for-groovy-er-xml</link>
		<comments>http://www.kellyrob99.com/blog/2009/07/26/streamingmarkupbuilder-for-groovy-er-xml/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 23:15:32 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[StreamingMarkupBuilder]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[xml declaration]]></category>
		<category><![CDATA[xml namespace]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=569</guid>
		<description><![CDATA[Been having an awful lot of fun lately playing with the Groovy StreamingMarkupBuilder. I&#8217;m not a big fan of xml in general, but it&#8217;s definitely got its uses(configuration and web service data interchange to name just a couple). StreamingMarkBuilder makes it really very painless to create complex xml structures without a whole lot of hassle. [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/' rel='bookmark' title='Gracelets and Seam &#8211; a DSL for Facelets and Groovy with easy integration'>Gracelets and Seam &#8211; a DSL for Facelets and Groovy with easy integration</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/10/25/grails-ui-datatable-using-xml-for-a-model/' rel='bookmark' title='Grails-UI DataTable using XML for a model'>Grails-UI DataTable using XML for a model</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/04/17/groovy-and-hibernate-validator-for-dynamic-constraints/' rel='bookmark' title='Groovy and Hibernate Validator for Dynamic Constraints'>Groovy and Hibernate Validator for Dynamic Constraints</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Been having an awful lot of fun lately playing with the Groovy <a href="http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+StreamingMarkupBuilder">StreamingMarkupBuilder</a>. I&#8217;m not a big fan of xml in general, but it&#8217;s definitely got its uses(configuration and web service data interchange to name just a couple).</p>
<p>StreamingMarkBuilder makes it really very painless to create complex xml structures without a whole lot of hassle. There are some excellent examples out there already, but I couldn&#8217;t find one offhand that put all the pieces together.</p>
<p>This example demonstrates how to include the xml declaration, set the encoding, and incorporate namespaces. It also shows how to use iteration to create nodes in the Document. The (somewhat contrived) example code shows one possible way to template Facelet forms based on some simple parameters.</p>
<pre class="brush: groovy; title: ; notranslate">
import groovy.xml.StreamingMarkupBuilder

def inputs = ['FirstName', 'LastName', 'Street', 'City', 'Country']
def controller = 'formController'
def bean = 'formBean'

def builder = new StreamingMarkupBuilder()
builder.encoding = &quot;UTF-8&quot;
def doc = builder.bind {
    mkp.xmlDeclaration()
    mkp.declareNamespace(ui: &quot;http://java.sun.com/jsf/facelets&quot;,
            h: &quot;http://java.sun.com/jsf/html&quot;)
    'ui:composition'(template: '/layout/main.xhtml') {
        'h:form'(id: &quot;${controller}_form&quot;) {
            inputs.each {input -&gt;
                def inputId = input.toLowerCase().replaceAll(' ', '')
                'h:outputLabel'(input, id: inputId, styleClass: 'inputlabel')
                'h:inputText'(id: &quot;${inputId}_input&quot;, value: &quot;${bean}_$inputId&quot;, styleClass: 'inputText')
            }
        }
        'h:commandButton'(id: &quot;${controller}_submit&quot;, action: &quot;#{${controller}.submit}&quot;, styleClass: &quot;submitButton&quot;,
                value: 'Submit')
    }
}
</pre>
<p>And the output looks like this.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;ui:composition xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot; template=&quot;/layout/main.xhtml&quot; xmlns:h=&quot;http://java.sun.com/jsf/html&quot;&gt;
  &lt;h:form id=&quot;formController_form&quot;&gt;
    &lt;h:outputLabel id=&quot;firstname&quot; styleClass=&quot;inputlabel&quot;&gt;FirstName&lt;/h:outputLabel&gt;
    &lt;h:inputText id=&quot;firstname_input&quot; value=&quot;formBean_firstname&quot; styleClass=&quot;inputText&quot;/&gt;
    &lt;h:outputLabel id=&quot;lastname&quot; styleClass=&quot;inputlabel&quot;&gt;LastName&lt;/h:outputLabel&gt;
    &lt;h:inputText id=&quot;lastname_input&quot; value=&quot;formBean_lastname&quot; styleClass=&quot;inputText&quot;/&gt;
    &lt;h:outputLabel id=&quot;street&quot; styleClass=&quot;inputlabel&quot;&gt;Street&lt;/h:outputLabel&gt;
    &lt;h:inputText id=&quot;street_input&quot; value=&quot;formBean_street&quot; styleClass=&quot;inputText&quot;/&gt;
    &lt;h:outputLabel id=&quot;city&quot; styleClass=&quot;inputlabel&quot;&gt;City&lt;/h:outputLabel&gt;
    &lt;h:inputText id=&quot;city_input&quot; value=&quot;formBean_city&quot; styleClass=&quot;inputText&quot;/&gt;
    &lt;h:outputLabel id=&quot;country&quot; styleClass=&quot;inputlabel&quot;&gt;Country&lt;/h:outputLabel&gt;
    &lt;h:inputText id=&quot;country_input&quot; value=&quot;formBean_country&quot; styleClass=&quot;inputText&quot;/&gt;
  &lt;/h:form&gt;
  &lt;h:commandButton id=&quot;formController_submit&quot; action=&quot;#{formController.submit}&quot; styleClass=&quot;submitButton&quot; value=&quot;Submit&quot;/&gt;
&lt;/ui:composition&gt;
</pre>
<p>Normally StreamingMarkupBuilder output is devoid of whitespace but for readability I rendered it using the <a href="http://uncommentedbytes.blogspot.com/2008/09/format-groovy-streamingmarkupbuilder.html">very handy example provided here</a>. Big thank you to Jeff Sheets for sharing that code!</p>
<!-- AdSense Now! V1.95 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadout" style="float:right;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-6955914197200080";
/* 728x90, created 8/3/09 */
google_ad_slot = "4051815125";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/' rel='bookmark' title='Gracelets and Seam &#8211; a DSL for Facelets and Groovy with easy integration'>Gracelets and Seam &#8211; a DSL for Facelets and Groovy with easy integration</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/10/25/grails-ui-datatable-using-xml-for-a-model/' rel='bookmark' title='Grails-UI DataTable using XML for a model'>Grails-UI DataTable using XML for a model</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/04/17/groovy-and-hibernate-validator-for-dynamic-constraints/' rel='bookmark' title='Groovy and Hibernate Validator for Dynamic Constraints'>Groovy and Hibernate Validator for Dynamic Constraints</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/07/26/streamingmarkupbuilder-for-groovy-er-xml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gracelets and Seam &#8211; a DSL for Facelets and Groovy with easy integration</title>
		<link>http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gracelets-and-seam-a-dsl-for-facelets-with-easy-integration</link>
		<comments>http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/#comments</comments>
		<pubDate>Mon, 11 May 2009 04:16:38 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[Gracelets]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=380</guid>
		<description><![CDATA[Over the last year I&#8217;ve done a lot of work with JBoss Seam, and while it&#8217;s not Grails it&#8217;s also not that bad for a web framework. Facelets is the view technology of choice, and it&#8217;s certainly better than many alternatives, but at the heart it is still xml and all those brackets make me [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/07/26/streamingmarkupbuilder-for-groovy-er-xml/' rel='bookmark' title='StreamingMarkupBuilder for Groovy-er xml'>StreamingMarkupBuilder for Groovy-er xml</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/04/17/groovy-and-hibernate-validator-for-dynamic-constraints/' rel='bookmark' title='Groovy and Hibernate Validator for Dynamic Constraints'>Groovy and Hibernate Validator for Dynamic Constraints</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/01/07/bamboo-grails-and-git-for-continuous-integration/' rel='bookmark' title='Bamboo, Grails and Git for Continuous Integration'>Bamboo, Grails and Git for Continuous Integration</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Over the last year I&#8217;ve done a lot of work with <a class="zem_slink" href="http://www.seamframework.org" title="JBoss Seam" rel="homepage">JBoss Seam</a>, and while it&#8217;s not <a class="zem_slink" href="http://grails.org" title="Grails (framework)" rel="homepage">Grails</a> it&#8217;s also not that bad for a web framework.  Facelets is the view technology of choice, and it&#8217;s certainly better than many alternatives, but at the heart it is still xml and all those brackets make me dizzy after awhile.  Along comes <a href="http://gracelets.sourceforge.net/index.html">Gracelets</a> to provide a nice builder <a class="zem_slink" href="http://en.wikipedia.org/wiki/Digital_subscriber_line" title="Digital subscriber line" rel="wikipedia">DSL</a> and Groovy integration as a replacement for my xml woes. Yay!  It also brings some great simplification to the creation of component libraries &#8211; including hot deployment.  But enough of the sales pitch, let&#8217;s see if it works.</p>
<p>In order to test drive Gracelets, I took an existing Seam web-app and configured the web.xml with the GraceletsViewHandler in place of the standard SeamListener.  I generally use <a class="zem_slink" href="http://maven.apache.org" title="Apache Maven" rel="homepage">Maven</a> for dependency management, and I couldn&#8217;t find a repository hosting Gracelets so I installed the downloaded jars into my local repository and adding them to the web-app. The JBoss Seam Extension is also required.</p>
<pre class="brush: bash; title: ; notranslate">
mvn install:install-file -Dfile=gracelets-api-2.0.0.jar -DgroupId=gracelets -DartifactId=gracelets-api -Dversion=2.0.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=gracelets-impl-2.0.0.RC2.jar -DgroupId=gracelets -DartifactId=gracelets-impl -Dversion=2.0.0.RC2 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=jboss_seam_2.0.0_all-1.0.11.jar -DgroupId=gracelets -DartifactId=jboss-seam-extension -Dversion=1.0.11 -Dpackaging=jar -DgeneratePom=true
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
        &lt;groupid&gt;gracelets&lt;/groupid&gt;
        &lt;artifactid&gt;jboss-seam-extension&lt;/artifactid&gt;
        &lt;version&gt;1.0.11&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
        &lt;groupid&gt;gracelets&lt;/groupid&gt;
        &lt;artifactid&gt;gracelets-api&lt;/artifactid&gt;
        &lt;version&gt;2.0.0&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
        &lt;groupid&gt;gracelets&lt;/groupid&gt;
        &lt;artifactid&gt;gracelets-impl&lt;/artifactid&gt;
        &lt;version&gt;2.0.0.RC2&lt;/version&gt;
 &lt;/dependency&gt;
</pre>
<p>The application was deployed as usual and fired up without a problem. For a test page I just created an index.groovy file in the root directory. According to the docs, a .groovy extension trumps .xhtml so that effectively replaced the front page of the app. Here&#8217;s the standard first page of a new web-app(straight from the Gracelets examples), with the xhtml builder.</p>
<pre class="brush: groovy; title: ; notranslate">
xh.html {
     head { title(&quot;Hello World Example&quot;) }

     body {
         print { &quot;Hello World @ &quot; + new Date() }
     }
}
</pre>
<p>Not bad, let&#8217;s compare to the standard Facelets version, using a file based on the standard seam-gen created index.xhtml file. I&#8217;ve bound the instantiation of the Date object to a backing bean, since you can&#8217;t make an inline call to do it a standard Facelets view. I seem to recall seeing that Seam kept a component available to provide the present Date/Time, but I couldn&#8217;t find it offhand today.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
        &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;f:view contentType=&quot;text/html&quot;
        xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
        xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
        xmlns:h=&quot;http://java.sun.com/jsf/html&quot;
        xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
        xmlns:a=&quot;http://richfaces.org/a4j&quot;
        xmlns:s=&quot;http://jboss.com/products/seam/taglib&quot;&gt;
    &lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/&gt;
        &lt;title&gt;Hello World Example&lt;/title&gt;
        &lt;ui:insert name=&quot;head&quot;/&gt;
    &lt;/head&gt;
    &lt;body&gt;
    Hello World @ #{backingBean.date}
    &lt;/body&gt;
    &lt;/html&gt;
&lt;/f:view&gt;
</pre>
<p>Notice I&#8217;ve also left the Seam and <a class="zem_slink" href="http://www.jboss.org/jbossrichfaces/" title="Richfaces" rel="homepage">RichFaces</a> tab library namespaces in the xml declaration. Although the Gracelets docs didn&#8217;t seem to easily confirm this, inclusion of the JBoss Seam extension also makes those libraries and their associated builders available by default for Gracelets views. Here&#8217;s a final example to leave you with that incorporates a couple of elements from those libraries and a quick and dirty use of .each for rendering, and even a couple of screenshots to show off the progression.</p>
<pre class="brush: groovy; title: ; notranslate">
def loremIpsum = '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin tempor, mauris sed volutpat consequat, risus tellus ultrices
tortor, at sollicitudin felis erat vitae augue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames
ac turpis egestas. Vestibulum tincidunt egestas viverra. Integer ullamcorper, ipsum id malesuada sollicitudin, nisl velit
ultricies purus, eu aliquet diam mi sit amet eros. Quisque arcu orci, consequat dictum vehicula a, pellentesque eu nisl.
'''
xh.html {
     head { title(&quot;Hello World Example&quot;) }
     body {
         s.div(id:'aSeamDiv', rendered:'true') {
            r.panel(header:'A RichFaces Panel') {
                println { &quot;Hello World @ &quot; + new Date() }
                a('MyBlogLink', href: 'http://www.kellyrob99.com/blog')
            }
         }
         r.separator()
         r.spacer()
         r.simpleTogglePanel(header:'A RichFaces TogglePanel'){
            println loremIpsum
         }

         def tableModel = loremIpsum.tokenize()[0..10]
         def tableModel2 = loremIpsum.tokenize()[11..20]
         table {
            tr {
                td {
                    tableModel.each { println it }
                }
                td {
                    tableModel2.each { println it }
                }
            }
         }
     }
}
</pre>
<p>Not bad at all. I won&#8217;t bore you with the equivalent xml version &#8211; suffice it to say it takes up a lot more space.  I haven&#8217;t even touched on the easy component/library features Gracelets provides yet, but I am already quite impressed simply by the replacement of xml with an equivalent but sparser syntax. And I don&#8217;t miss the need for closing tags much either. The documentation for the project is quite complete, rich with examples, at least for the standard jsf components(hint hint &#8211; more examples using Seam and RichFaces would be appreciated!)  Give it a try and decide for yourself, but if it keeps going this way, it might become a reasonable alternative for Grails.</p>
<p> <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="ngg-galleryoverview" id="ngg-gallery-3-380">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/?show=slide">
			[Show as slideshow]		</a>
	</div>

	<!-- Piclense link -->
	<div class="piclenselink">
		<a class="piclenselink" href="javascript:PicLensLite.start({feedUrl:'http://www.kellyrob99.com/blog/wp-content/plugins/nextgen-gallery/xml/media-rss.php?gid=3&amp;mode=gallery'});">
			[View with PicLens]		</a>
	</div>
	
	<!-- Thumbnails -->
		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v1.png" title=" " class="shutterset_set_3" >
								<img title="v1.png" alt="v1.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v1.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-14" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v2.png" title=" " class="shutterset_set_3" >
								<img title="v2.png" alt="v2.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v2.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-15" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v3.png" title=" " class="shutterset_set_3" >
								<img title="v3.png" alt="v3.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v3.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-16" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v4.png" title=" " class="shutterset_set_3" >
								<img title="v4.png" alt="v4.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v4.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-17" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v4_panelopen.png" title=" " class="shutterset_set_3" >
								<img title="v4_panelopen.png" alt="v4_panelopen.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v4_panelopen.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-18" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v5.png" title=" " class="shutterset_set_3" >
								<img title="v5.png" alt="v5.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v5.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-19" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v6.png" title=" " class="shutterset_set_3" >
								<img title="v6.png" alt="v6.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v6.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-20" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/v6_panelopen.png" title=" " class="shutterset_set_3" >
								<img title="v6_panelopen.png" alt="v6_panelopen.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/gracelets/thumbs/thumbs_v6_panelopen.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/4fdd0aeb-98bb-4937-b9ad-e5a5d2f4eb93/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=4fdd0aeb-98bb-4937-b9ad-e5a5d2f4eb93" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/07/26/streamingmarkupbuilder-for-groovy-er-xml/' rel='bookmark' title='StreamingMarkupBuilder for Groovy-er xml'>StreamingMarkupBuilder for Groovy-er xml</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/04/17/groovy-and-hibernate-validator-for-dynamic-constraints/' rel='bookmark' title='Groovy and Hibernate Validator for Dynamic Constraints'>Groovy and Hibernate Validator for Dynamic Constraints</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/01/07/bamboo-grails-and-git-for-continuous-integration/' rel='bookmark' title='Bamboo, Grails and Git for Continuous Integration'>Bamboo, Grails and Git for Continuous Integration</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/05/10/gracelets-and-seam-a-dsl-for-facelets-with-easy-integration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

