Issue Details (XML | Word | Printable)

Key: GRAILSPLUGINS-166
Type: Bug Bug
Status: In Progress In Progress
Priority: Major Major
Assignee: Oscar Konno Sampaio
Reporter: Karsten Silz
Votes: 7
Watchers: 10
Operations

If you were logged in you would be able to see more operations.
Grails Plugins

Error with Grails 1.0RC1

Created: 17/Oct/07 07:09 AM   Updated: 21/Jun/09 05:53 PM
Component/s: Grails-ScaffoldTags
Affects Version/s: Grails-ScaffoldTags 0.7
Fix Version/s: Grails-ScaffoldTags 0.7.1

Time Tracking:
Not Specified

Environment: Windows XP, SP2, Java 6u3, Grails 1.0RC1, ScaffoldTags 0.7


 Description  « Hide
I installed the plugin with the "img-no-skin" and then generated controllers and views for my single class ("User"). Now when I hit the user controller, I get the following stack trace:
[17422] StackTrace Sanitizing stacktrace:
java.io.FileNotFoundException: grails-app\views\user (Access denied)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:85)
        at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplateWithResource(GroovyPagesTemplateEngine.java:2
75)
        at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplate(GroovyPagesTemplateEngine.java:167)
        at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplate(GroovyPagesTemplateEngine.java:182)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at org.codehaus.groovy.runtime.metaclass.StdMetaMethod.invoke(StdMetaMethod.java:18)
        at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:538)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:749)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:589)
        at org.codehaus.groovy.runtime.Invoker.invokePojoMethod(Invoker.java:87)
        at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:75)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:74)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:158)
        at ScaffoldTagLib.executeTemplate(ScaffoldTagLib.groovy:767)
        at ScaffoldTagLib.this$2$executeTemplate(ScaffoldTagLib.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at org.codehaus.groovy.runtime.metaclass.StdMetaMethod.invoke(StdMetaMethod.java:18)
        at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:538)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:749)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:589)
        at org.codehaus.groovy.runtime.Invoker.invokePojoMethod(Invoker.java:87)
        at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:75)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:74)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:158)
        at org.codehaus.groovy.grails.plugins.web.ControllersGrailsPlugin$_closure4_closure82.doCall(ControllersGrailsPlugin.groovy:4
22)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:58)
        at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:538)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:749)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:589)
        at groovy.lang.Closure.call(Closure.java:290)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:78)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:943)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:589)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:717)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:66)
        at ScaffoldTagLib$_closure2.doCall(ScaffoldTagLib.groovy:214)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:58)
        at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:538)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:749)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:589)
        at groovy.lang.Closure.call(Closure.java:290)
        at org.codehaus.groovy.grails.web.pages.GroovyPage.invokeTag(GroovyPage.java:213)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at org.codehaus.groovy.runtime.metaclass.StdMetaMethod.invoke(StdMetaMethod.java:18)
        at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:538)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:749)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:945)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:66)
        at D__source_bugs_and_screenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp.run(D__source_bugs_and_s
creenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp:22)
        at org.codehaus.groovy.grails.web.pages.GroovyPageWritable.writeTo(GroovyPageWritable.java:110)
        at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderWithTemplateEngine(GroovyPageView.java:109)
        at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderMergedOutputModel(GroovyPageView.java:88)
        at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
        at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1140)
        at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:268)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:790)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
[...]
Caused by: java.io.FileNotFoundException: grails-app\views\user (Acess denied)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at ScaffoldTagLib.executeTemplate(ScaffoldTagLib.groovy:767)
        at ScaffoldTagLib.this$2$executeTemplate(ScaffoldTagLib.groovy)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at ScaffoldTagLib$_closure2.doCall(ScaffoldTagLib.groovy:214)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at D__source_bugs_and_screenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp.run(D__source_bugs_and_s
creenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp:22)
[17469] view.GroovyPageView Error processing GroovyPageView: I/O error reading stream for resource [file [D:\source\bugs and screensh
ots\grails\ScaffoldPlugin\SeldonManager\grails-app\views\user]]: grails-app\views\user (Zugriff verweigert)
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: I/O error reading stream for resource [file [D:\source\bugs and
 screenshots\grails\ScaffoldPlugin\SeldonManager\grails-app\views\user]]: grails-app\views\user (Zugriff verweigert)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at ScaffoldTagLib.executeTemplate(ScaffoldTagLib.groovy:767)
        at ScaffoldTagLib.this$2$executeTemplate(ScaffoldTagLib.groovy)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at ScaffoldTagLib$_closure2.doCall(ScaffoldTagLib.groovy:214)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invokeByReflection(CachedMethod.java:107)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:127)
        at D__source_bugs_and_screenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp.run(D__source_bugs_and_s
creenshots_grails_ScaffoldPlugin_SeldonManager_grails_app_views_user_list_gsp:22)
Caused by: java.io.FileNotFoundException: grails-app\views\user (Access denied)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)


 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Christian Sprecher added a comment - 29/Oct/07 11:29 AM
Same here on W2K ...

Bob Herrmann added a comment - 29/Nov/07 07:45 AM
Just tried this today (Nov 29, 2007) and I'm not getting goodness. Running on Linux and I get

java.io.FileNotFoundException: grails-app/views/keyword (Is a directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)

FYI: My domain classes use full package names and are written in Java using annotations. ie. com.mycompany.Keyword.java


Peter Kelley added a comment - 04/Feb/08 04:55 PM
I'm seeing this too with a really basic sample project. This is a critical issue as far as I'm concerned. How do we raise the priority?

SR Melody added a comment - 01/Apr/08 07:17 AM
I'm also seeing this on Ubuntu Linux on a simple project. It's disappointing this isn't working at all, it seems like a neat idea.

David Smiley added a comment - 08/Apr/08 11:10 PM
ScaffoldTags needs to be ported to grails 1; it hasn't yet. I have an app in production that uses & depends on ST heavily on grails 0.6. Without it I'm not sure what I would of done given that I had a huge domain model that needed CRUD operations. I just recently upgraded the app to run on grails 1.0.1 which involved a couple tweaks to ST. I'm not using ST generated controllers (as you are attempting to use) so I don't know what needs to be done there. The main change I remember making was in ScaffoldTagLib.groovy (the real brains of ST), which declared the types of some parameters to be Class but grails or groovy appears to have a bug with that: GRAILS-2659

David Smiley added a comment - 06/Aug/08 04:55 PM
Assuming you're using grails 1.0.3, the changes needed to ScaffoldTagLib aren't so bad. For an earlier grails versions, there may be more issues. Here is what I've got. I tweaked findView() a bit to cache some things and to clarify the code. At this point I'm not entirely sure if this is necessary to fix ST but I'm providing it here any way. Here it is.
private findView(_view) {
        if (log.isDebugEnabled()) {
            log.debug "findView: "+_view
        }
        Collection view = (_view instanceof Collection) ? _view : Collections.singleton(_view);
       // optimization: cache the controller URI in the request to avoid
        // repeated calls to getControllerUri
        String controllerUri = request.controllerUri
        if (!controllerUri) {
            controllerUri = grailsAttributes.getControllerUri(request)
            request.controllerUri = controllerUri
        }
         

        // There needs to be a better way to do the path lookup
        // ORIGINAL CODE
        // String controllerUri = grailsAttributes.getControllerUri(request)
        
        // optimization
        prmms.ViewUriCache cache = prmms.ViewUriCache.getInstance()
        String viewKey = controllerUri + '.' + view
        def cachedUri = cache.get(viewKey)
        if (GrailsUtil.environment == GrailsApplication.ENV_PRODUCTION) {
            if (cachedUri || cache.containsKey(viewKey)) return cachedUri
        }
          
        // println("View ${viewKey} not found in cache")
        
        def viewpaths = ["${PATH_TO_VIEWS}${controllerUri}", 
                          "${PATH_TO_VIEWS}/scaffolding", 
                          "${PLUGIN_PATH_TO_VIEWS}/scaffolding"]
//        println "searching for ${view} in ${viewpaths}"
        def ctx = grailsAttributes.applicationContext
        def resourceLoader = ctx.containsBean('groovyPageResourceLoader') ? ctx.groovyPageResourceLoader : ctx
        for (p in viewpaths) {
            for (v in view) {
                def uri = "${p}/${v}"
                log.debug "searching for ${uri}"
                def resource = resourceLoader.getResource(uri)
                if (resource?.file?.exists()) {
                    log.debug("found $uri at rsrc $resource")
                    cache.put(viewKey, uri)
                    return uri
                }
            }
        }
        log.debug "none found"
        cache.put(viewKey,null)
        return null
    }

That "prmms.ViewUriCache" class is my own and you can modify my code above to not use it or to supply your own.

Next, modify the method signatures of findUriForXXXXXX as follows:
private String findUriForType(String viewType, Collection prefix, clazz, String suffix)
private String findUriForExactClass(String viewType, Collection prefix, clazz, String suffix)
Groovy seems to have an issue with declaring types in arguments in certain circumstances causing it to not know which method you mean and throwing an error. The main change was removing "Class" to narrow the type.

And finally, I don't know if this is necessary, but where renderType calls findUriForType, I wrap the 2nd argument "prefix" in a collection singleton like so:
def uri = findUriForType(template, Collections.singleton(prefix), clazz, suffix)

My description above was verified to work by a 3rd party: Torsten Kruse


Neil Crow added a comment - 12/Aug/08 05:15 PM
David, thanks for the help, but as a complete grails and groovy newby I nearly pulled a neck muscle trying to follow what you were doing up there.
So I ended up doing some debugging of my own, and this is what I have found.
The view parameter that is passed in to the findView() method is not a java.lang.String but it is a groovy.lang.GString, so it falls to the else part of the if, and loops thru the characters "list/".
It finds a match on the last character "/", and returns uri "/WEB-INF/grails-app/views/book//".

So to fix the issue I changed the if statement to check for instanceof String OR GString, which works for the first view (list).
I still have 2 issues, firstly various instance of

[Fatal Error] :-1:-1: Premature end of file.

even when viewing the app homepage.

And secondly, when selecting the create button on the list page

No signature of method: ScaffoldTagLib.findUriForType() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.Class, java.lang.String) values: {"editor", "", class java.lang.String, ""}

My code changes below, (just look for the GString):

private findView(view) {
        // There needs to be a better way to do the path lookup
        String controllerUri = grailsAttributes.getControllerUri(request)
        def viewpaths = ["${PATH_TO_VIEWS}${controllerUri}", 
                          "${PATH_TO_VIEWS}/scaffolding", 
                          "${PLUGIN_PATH_TO_VIEWS}/scaffolding"]
//        println "searching for ${view} in ${viewpaths}"
	    def ctx = grailsAttributes.applicationContext
	    def resourceLoader = ctx.containsBean('groovyPageResourceLoader') ? ctx.groovyPageResourceLoader : ctx
        for (p in viewpaths) {
            if (view instanceof String  || view instanceof GString) {
                def uri = "${p}/${view}"
                def resource = resourceLoader.getResource(uri)
                if (resource && resource.file && resource.file.exists()) {
//                    println "found-1 in ${uri} at ${resource}"
                    return uri
                }
            } else {
                for (v in view) {
                    def uri = "${p}/${v}"
//					println "searching for ${uri}"
                    def resource = resourceLoader.getResource(uri)
                    if (resource && resource.file && resource.file.exists()) {
//                        println "found-2 in ${uri} at ${resource}"
                        return uri
                    }
                }
            }
        }
//        println "none found"
        return null
    }

David Smiley added a comment - 13/Aug/08 07:15 AM
Neil, thanks for the String vs GString thing you pointed out, I'll have to change my code. The "no signature of method" should go away once you modify the method signatures I mentioned in my last message. It would seem it's some kind of Groovy level issue.

The "Premature end of file" thing is a Firefox 3 related issue; there's a JIRA issue for it and a fix.


David Smiley added a comment - 13/Aug/08 07:20 AM
Never mind my comment String vs GString... I should of compared your code with mine. I thought you simply changed by code in perhaps one line but you have a different findView implementation remeniscent of the original. See mine above.

Neil Crow added a comment - 14/Aug/08 04:05 PM
David, you're right, I did just make the change to the original, it would be a rgeat help if you could attach the source for your prmms.ViewUriCache class.

The "Premature end of file" thing is happening on my Opera-951 too.

I'm still battling with the following

Message: No signature of method: ScaffoldTagLib.findUriForType() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.Class, java.lang.String) values: {"editor", "", class java.lang.String, ""} 
Caused by: No signature of method: ScaffoldTagLib.findUriForType() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.Class, java.lang.String) values: {"editor", "", class java.lang.String, ""} 
Class: ScaffoldTagLib 
At Line: [580]

Any pointers?


David Smiley added a comment - 15/Aug/08 08:57 AM
Neil, respectfully, if you read and followed what I said about changing the method signatures then you won't get that error. I would take my code if I were you and either ditch the ViewUriCache or implement your own. The code is as simply as you might imagine it is:
class ViewUriCache {
	
	Map cache = Collections.synchronizedMap(new HashMap<String, String>())
	
	static ViewUriCache instance = new ViewUriCache()
	
	private ViewUriCache() {}

	static ViewUriCache getInstance() { return instance }
	
	String put(String key, String URI) {
		return cache.put(key, URI)
	}
	
	String get(String key) {
		return cache.get(key)		
	}
	
	boolean containsKey(String key) {
		return cache.containsKey(key)
	}

}

Neil Crow added a comment - 15/Aug/08 05:33 PM
Hi David, thanks anyway but it didn't help me.
I tried with your findView method and ViewUriCache class.
It works for the list page, but after clicking the create button I still had the same error "No signature of method ...".
So out of frustration I reverted back to the original (with the OR GString) and removed all of the type declarations from the findUriForType and findUriForExactClass methods, and EUREKA the create button worked.

Although now I am looking at an issue with the save function.

groovy.lang.MissingPropertyException: No such property: id for class: java.lang.String
...

tom corcoran added a comment - 15/May/09 10:48 AM
This should be a default feature if Grails. To have to update a gsp by hand once you have custom code in it should be unnecessary!

Oscar Konno Sampaio added a comment - 20/Jun/09 10:11 PM
Hi,

I am working in the porting to Grails 1.1.1. I already commit some changes and the no-img-skin are ok.