0

Grails でグルーヴィーを始めたばかりで、常に解決策を求められている場合は、ちょっとしたオーダーメイドに苦労しています。

ajax を使用して 2 つの選択を作成しようとしています。一方には他方に基づいた情報が入力されています。私がフォローしている例は、ここhttp://www.grails.org/AJAX-Driven+SELECTs+in+GSPです。私も scaffold を使用しているため、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>
4

2 に答える 2

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>

私の問題は、情報を永続化する方法と、実際に2番目のリストが最初のリストから値を導出する方法にかかっています。しかし、それはまた別の質問です。

于 2013-01-12T21:22:04.703 に答える
0

g:select タグのインラインではなく、select の onChange イベントの JavaScript 関数を別の関数に入れます。

于 2013-01-12T17:06:36.587 に答える