2013-01-12 21 views
0

groovy在grails上的新特性,并且如果始终需要解决方案,可能会遇到一些定制问题。gsp页面,带有从之前选择的select中获得的未封闭的GSP表达式

我想创建两个使用ajax选择,一个填充基于另一个的信息。我在下面的例子是http://www.grails.org/AJAX-Driven+SELECTs+in+GSP。我也在使用脚手架,所以我不得不使用install-templates命令来获取操作gsp文件的视图。从模板中微调一下,我有一个工作的创建视图,用于构建我的选择。但是,输入查询这些选择在一个错误的结果教程指定我不能工作了

Stack trace as below : 
| Error 2013-01-12 16:11:46,582 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver - GrailsTagException occurred when processing request: [GET] /TimeTracker2/time/create 
Unclosed GSP expression. Stacktrace follows: 
Message: Error initializing GroovyPageView 
    Line | Method 
->> 186 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 
Caused by GrailsTagException: Unclosed GSP expression 
->> 33 | doFilter in \grails-app\views\time\create.gsp 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

我GSP低于你可以看到所有的表情都关闭......建议吗?

<head> 
    <meta name="layout" content="main"> 
    <g:set var="entityName" value="\${domainClass.propertyName}" /> 
    <title>Create Time</title> 
</head> 
<body> 
    <a href="#create-{domainClass.propertyName}" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></a> 
    <div class="nav" role="navigation"> 
     <ul> 
      <li><a class="home" href="/TimeTracker2"><g:message code="default.home.label"/></a></li> 
      <li><g:link class="list" action="list"><!--g:message code="default.list.label" args="[entityName]" /-->Time List</g:link></li> 
     </ul> 
    </div> 
    <div id="create-{domainClass.propertyName}" class="content scaffold-create" role="main"> 
     <h1><!--g:message code="default.create.label" args="[entityName]" /-->Create Time</h1> 
     <g:if test="${flash.message}"> 
     <div class="message" role="status">${flash.message}</div> 
     </g:if> 
     <g:hasErrors bean="\${propertyName}"> 
     <ul class="errors" role="alert"> 
      <g:eachError bean="\${propertyName}" var="error"> 
      <li <g:if test="\${error in org.springframework.validation.FieldError}">data-field-id="\${error.field}"</g:if>><g:message error="\${error}"/></li> 
      </g:eachError> 
     </ul> 
     </g:hasErrors> 
     <g:form action="save" method="post" enctype="multipart/form-data" > 
      <fieldset class="form"> 
       <g:render template="form"/> 
       <g:select 
        optionKey="id" optionValue="Project" name="project.name" id="project.name" from="${Project.list()}" 
        onchange="${remoteFunction(
        controller:'project', 
        action:'ajaxGetClassifications', 
        params:'\\'id='\\' + escape(this.value)', 
        onComplete:'updateClassification(e)')}" 
        ></g:select> 
      </fieldset> 
      <fieldset class="buttons"> 
       <g:submitButton name="create" class="save" value="Create" /> 
      </fieldset> 
     </g:form> 
    </div> 
</body> 
+0

把所有的选择放在一行上 –

+0

另外,如果你使用的是jQuery,它将是'updateClassification(data)' –

回答

0

Id将select的onChange事件的javascript函数放入单独的函数中,而不是内联在g:select标记中。

+0

唉。裸露在我这实际上是我的第一个在JavaScript的裂缝,希望避免它。现在的代码如下,当项目和分类的实例存在时,不能在空对象上调用新的错误方法list() – user1854751

+0

\t \t \t \t <字段集类=” 形式 “> \t \t \t \t \t <克:渲染模板=” 形式 “/> \t \t \t \t \t <克:选择option键=” ID “optionValue =”项目“name =”project.name“id =”project.name“from =”$ {Project.list()}“onchange =”forChange()“> – user1854751

+0

\t \t \t \t \t \t \t \t <字段集类= “按钮”> \t \t \t \t \t <克:提交按钮名称=“create”class =“save”value =“Create”/> \t \t \t \t \t \t \t – user1854751

0

解决问题(并且有很多)后,答案是提供我的域类的正确完整位置。

<g:select optionKey="id" optionValue="name" name="project.name" id="project.name" 
from="${timetracker2.Project.list()}" onchange="${remoteFunction(controller:'project', 
          action:'ajaxGetClassifications', 
          params:'\'id=\' + escape(this.value)', 
          onComplete:'updateClassification(e)')}" 
         ></g:select> 

现在我的问题在于如何坚持信息,以及如何实际使第二个列表从第一个列表中获取其值。但那是另一天又一个问题。