如何呈现对gsp grails上特定位置的响应

时间:2016-10-31 01:32:56

标签: grails web rendering gsp

我是grails和groovy的新手。 我试图找出如何从同一gsp中的grails控制器中的动作呈现响应 - 但是在gsp的不同部分 - 作为接受请求的gsp(在这种情况下是web表单gsp页面)?

任何链接或曲目或直接到达“做到这一点”的回复都是受欢迎的。

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

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

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

现在功能的实际代码本身有效。我遇到的问题是:

我有一个gsp页面,它使用css模板和另一个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>

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

附加屏幕截图中的

:我想将结果放在文本框中,其中显示“此处显示的输出......” screenshot of gsp page

我认为grails中的模板是实现它的方法。但是当我尝试将模板插入代码的那一部分时,我得到一个Java Null指针异常。

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

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

感谢。

ironmantis7x

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Grails templates。 基本上,模板是视图的(可重用)部分。
信息
所以你创建模板文件 bookTemplate.gsp ,像往常一样把所有gsp / html代码放在那里(但只是部分,如果它将在体内使用,那么不要添加{ {1}},htmlbody标签等 示例

head

然后将该模板渲染到gsp页面中您想要的位置(使用简单的grails <div class="book" id="${book?.id}"> <div>Title: ${book?.title}</div> <div>Author: ${book?.author?.name}</div> </div> 标记。它将被简单地编译(因为模板中的代码将被粘贴到gsp视图中) )。
渲染

render

答案 1 :(得分:1)

我不知道你的grails版本,但是在2.4.5上,也许在你的版本上,你可以使用: http://docs.grails.org/2.4.x/ref/Tags/submitToRemote.html

查看属性更新:

  

update(可选) - 包含要更新的元素的Map   'success'或'failure'状态,或元素id为的字符串   更新,在这种情况下将忽略失败事件

你也可以在某些事件上触发javascript,......

在submitToRemote按钮中调用的动作中,您可以渲染模板(但是如果渲染模板,则不要将布局放在此模板中,否则您将渲染所有网站结构...)它将是显示在HTML元素中,其中包含您在“update”属性中放入的ID。

链接中给出的示例很有趣。