如何在 gsp grails 上呈现对特定位置的响应
how to render a response to a specific place on a gsp grails
我是 grails 和 groovy 的新手。
我试图找出如何在同一个 gsp 中呈现来自 grails 控制器中的操作的响应 - 但在 gsp 的不同部分 - 作为接受请求的 gsp(在本例中为 Web 表单 gsp 页面)?
欢迎任何链接或教程,或者开门见山 "do this" 类型的回复。
我尝试 google 搜索它,但我不确定使用什么作为搜索词,也找不到简明的答案。
========= UPDATE TO QUESTION (INCLUDING SOME CODE) =========
这是我正在使用的代码。这是一个 Grails 应用程序,我在其中使用 bootstrap 模板(当然可以在 Internet 上免费获得)。
现在功能的实际代码本身起作用了。我遇到的问题是:
我有一个 gsp 页面,它使用 css 模板和另一个 gsp 模板进行布局。我可以在我的 gsp 页面中使用此代码(片段)在 gsp+css 模板中启动页面:
<g:layoutBody/>
这允许我在这个 gsp 文件中为请求调用我的调用控制器代码:
<body>
<g:form name="form" controller="apiStart" id="form">
<div><g:select name="protocolType" value="restCall" from="${["-select-", "GET", "POST", "PUT", "DELETE"]}"/>   <label>URL: </label><g:textField name="url" value="${url}" />
  <label>username: </label><g:textField name="userName" value="${userName}" />   <label>password: </label><g:textField name="passWord" value="${passWord}" /></div>
%{--<div class="text-field"><label>URL: </label><g:textField name="url" value="${url}" /></div>--}%
%{--<div class="text-field"><label>username: </label><g:textField name="userName" value="${userName}" /></div>
<div class="text-field"><label>password: </label><g:textField name="passWord" value="${passWord}" /></div>--}%
<br>
<div><label>Use Advanced Parameters?</label><g:checkBox name="useAdvParms" value="${false}" /></div>
<div class="text-field"><label>Header1: </label><g:textField name="header1" value="${header1}" />   <label>Value1: </label><g:textField name="value1" value="${header2}" /></div>
%{--<div class="text-field"><label>Value1: </label><g:textField name="value1" value="${header2}" /></div>--}%
<div class="text-field"><label>Header2: </label><g:textField name="header2" value="${header3}" />   <label>Value2: </label><g:textField name="value2" value="${header4}" /></div>
%{--<div class="text-field"><label>Value2: </label><g:textField name="value2" value="${header4}" /></div>--}%
<br>
<div class="submit"><g:actionSubmit value="Submit" action="save"/></div>
</g:form>
</body>
然后是响应的 gsp 代码:
<body>
<h3>API Test Results</h3>
API Tested: ${apiStart.url}, Response: ${apiStart.response3}
<br>
%{--<g:textArea name="myField" value="myValue" rows="20" cols="100"/>--}%
<div class="textarea"><label>Output</label><br><g:textArea name="myField" value="${apiStart.result3}" />
</div>
%{--Responce Code: ${apiStart.response3}<br>--}%
%{--Response: <br> ${apiStart.result3} <br>--}%
</body>
我的问题:它作为单独的页面工作正常。我想在与调用请求相同的页面上呈现请求的结果。
在所附的屏幕截图中:我想将结果放在显示 "Output Displayed here...." 的文本框中
我认为 grails 中的模板是实现它的方法。但是当我尝试将模板插入代码的那部分时,我得到了一个 Java 空指针异常。
有人可以建议并告诉我最好的方法吗?
==================== END of Updated question ===================
谢谢。
ironmantis7x
您可以尝试使用 Grails templates。
基本上,模板是视图的(可重用)部分。
信息:
所以你创建模板文件 bookTemplate.gsp,像往常一样把所有的 gsp/html 代码放在那里(但只是部分,如果它会在正文中使用,那么不要添加 html
、body
、head
标签等
示例:
<div class="book" id="${book?.id}">
<div>Title: ${book?.title}</div>
<div>Author: ${book?.author?.name}</div>
</div>
然后将该模板渲染到 gsp 页面中您希望它们所在的位置(使用简单的 grails render
标记。它会被简单地编译(因为模板中的代码将被粘贴到gsp 视图)。
渲染:
<g:render template="bookTemplate" model="[book: myBook]" />
我不知道你的 grails 版本,但在 2.4.5 上,也许在你的版本上,你可以使用:
http://docs.grails.org/2.4.x/ref/Tags/submitToRemote.html
并查看属性更新:
update (optional) - Either a Map containing the elements to update for
'success' or 'failure' states, or a string with the element id to
update, in which case failure events would be ignored
您还可以在某些事件中触发 javascript,...
在 submitToRemote 按钮中调用的操作中,您可以渲染一个模板(但如果您渲染模板,请不要将您的布局放在该模板中,否则您将渲染所有网站结构...)并且它将显示在 HTML 元素中,其中包含您在 "update" 属性.
中输入的 ID
link中给出的例子很有趣。
我是 grails 和 groovy 的新手。 我试图找出如何在同一个 gsp 中呈现来自 grails 控制器中的操作的响应 - 但在 gsp 的不同部分 - 作为接受请求的 gsp(在本例中为 Web 表单 gsp 页面)?
欢迎任何链接或教程,或者开门见山 "do this" 类型的回复。
我尝试 google 搜索它,但我不确定使用什么作为搜索词,也找不到简明的答案。
========= UPDATE TO QUESTION (INCLUDING SOME CODE) =========
这是我正在使用的代码。这是一个 Grails 应用程序,我在其中使用 bootstrap 模板(当然可以在 Internet 上免费获得)。
现在功能的实际代码本身起作用了。我遇到的问题是:
我有一个 gsp 页面,它使用 css 模板和另一个 gsp 模板进行布局。我可以在我的 gsp 页面中使用此代码(片段)在 gsp+css 模板中启动页面:
<g:layoutBody/>
这允许我在这个 gsp 文件中为请求调用我的调用控制器代码:
<body>
<g:form name="form" controller="apiStart" id="form">
<div><g:select name="protocolType" value="restCall" from="${["-select-", "GET", "POST", "PUT", "DELETE"]}"/>   <label>URL: </label><g:textField name="url" value="${url}" />
  <label>username: </label><g:textField name="userName" value="${userName}" />   <label>password: </label><g:textField name="passWord" value="${passWord}" /></div>
%{--<div class="text-field"><label>URL: </label><g:textField name="url" value="${url}" /></div>--}%
%{--<div class="text-field"><label>username: </label><g:textField name="userName" value="${userName}" /></div>
<div class="text-field"><label>password: </label><g:textField name="passWord" value="${passWord}" /></div>--}%
<br>
<div><label>Use Advanced Parameters?</label><g:checkBox name="useAdvParms" value="${false}" /></div>
<div class="text-field"><label>Header1: </label><g:textField name="header1" value="${header1}" />   <label>Value1: </label><g:textField name="value1" value="${header2}" /></div>
%{--<div class="text-field"><label>Value1: </label><g:textField name="value1" value="${header2}" /></div>--}%
<div class="text-field"><label>Header2: </label><g:textField name="header2" value="${header3}" />   <label>Value2: </label><g:textField name="value2" value="${header4}" /></div>
%{--<div class="text-field"><label>Value2: </label><g:textField name="value2" value="${header4}" /></div>--}%
<br>
<div class="submit"><g:actionSubmit value="Submit" action="save"/></div>
</g:form>
</body>
然后是响应的 gsp 代码:
<body>
<h3>API Test Results</h3>
API Tested: ${apiStart.url}, Response: ${apiStart.response3}
<br>
%{--<g:textArea name="myField" value="myValue" rows="20" cols="100"/>--}%
<div class="textarea"><label>Output</label><br><g:textArea name="myField" value="${apiStart.result3}" />
</div>
%{--Responce Code: ${apiStart.response3}<br>--}%
%{--Response: <br> ${apiStart.result3} <br>--}%
</body>
我的问题:它作为单独的页面工作正常。我想在与调用请求相同的页面上呈现请求的结果。
在所附的屏幕截图中:我想将结果放在显示 "Output Displayed here...." 的文本框中
我认为 grails 中的模板是实现它的方法。但是当我尝试将模板插入代码的那部分时,我得到了一个 Java 空指针异常。
有人可以建议并告诉我最好的方法吗?
==================== END of Updated question ===================
谢谢。
ironmantis7x
您可以尝试使用 Grails templates。
基本上,模板是视图的(可重用)部分。
信息:
所以你创建模板文件 bookTemplate.gsp,像往常一样把所有的 gsp/html 代码放在那里(但只是部分,如果它会在正文中使用,那么不要添加 html
、body
、head
标签等
示例:
<div class="book" id="${book?.id}">
<div>Title: ${book?.title}</div>
<div>Author: ${book?.author?.name}</div>
</div>
然后将该模板渲染到 gsp 页面中您希望它们所在的位置(使用简单的 grails render
标记。它会被简单地编译(因为模板中的代码将被粘贴到gsp 视图)。
渲染:
<g:render template="bookTemplate" model="[book: myBook]" />
我不知道你的 grails 版本,但在 2.4.5 上,也许在你的版本上,你可以使用: http://docs.grails.org/2.4.x/ref/Tags/submitToRemote.html
并查看属性更新:
update (optional) - Either a Map containing the elements to update for 'success' or 'failure' states, or a string with the element id to update, in which case failure events would be ignored
您还可以在某些事件中触发 javascript,...
在 submitToRemote 按钮中调用的操作中,您可以渲染一个模板(但如果您渲染模板,请不要将您的布局放在该模板中,否则您将渲染所有网站结构...)并且它将显示在 HTML 元素中,其中包含您在 "update" 属性.
中输入的 IDlink中给出的例子很有趣。