2013-01-12 35 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> 

現在我的問題在於如何堅持信息,以及如何實際使第二個列表從第一個列表中獲取其值。但那是另一天又一個問題。