目录
如何在GSP圣杯上呈现对特定位置的响应
grailswebrenderinggsp
浏览量:57
编辑于:2023-04-12 22:59:49

我是圣杯和时髦的新手。 我正在尝试找出如何在相同的 gsp 中呈现来自 grails 控制器中操作的响应 - 但在 GSP 的不同部分 - 作为接受请求的 gsp(在本例中为 Web 表单 gsp 页面)?

欢迎任何链接或图表,或者只是直接“这样做”类型的回复。

我试图在谷歌上搜索它,但我不确定使用什么作为搜索词,我找不到简洁的答案。

========= UPDATE TO QUESTION (INCLUDING SOME CODE) =========

这是我正在使用的代码。这是一个Grails应用程序,我在其中使用引导模板(当然可以在互联网上免费获得)。

现在,功能的实际代码本身就可以工作了。我遇到的问题是:

我有一个使用 css 模板的 gsp 页面和另一个 gsp temlate 进行布局。我可以在我的 gsp 页面中使用以下代码(片段)在 gsp+css tempate 中启动页面:

<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"]}"/> &nbsp <label>URL: </label><g:textField name="url" value="${url}" />
    &nbsp <label>username: </label><g:textField name="userName" value="${userName}" />  &nbsp <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}" /> &nbsp <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}" /> &nbsp <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>

我的问题:它作为单独的页面工作正常。我想在与调用请求相同的页面上呈现请求的结果。

在随附的屏幕截图中:我想将结果放在文本框中,其中显示“此处显示输出......”GSP 页面截图

我认为圣杯中的模板是解决问题的方法。但是当我尝试将模板插入代码的该部分时,我收到 Java Null 指针异常。

有人可以建议并告诉我最好的方法吗?

==================== END of Updated question ===================

谢谢。

铁螳螂7X

解决方案:

You can try using Grails templates. Basically Template is a (reusable) part of a View.
Info:
So you create template file bookTemplate.gsp, put all the gsp/html code in there as usual (but just the part, if it will be used in the body, then don't add , , tags etc.
Example:html``body``head

<div class="book" id="${book?.id}">
   <div>Title: ${book?.title}</div>
   <div>Author: ${book?.author?.name}</div>
</div>

Then you render that template into the gsp page in places where you want them to be (with a simple grails tag. And it will simply get compiled (as the code from template would be pasted into gsp view).
Render:render

<g:render template="bookTemplate" model="[book: myBook]" />