【问题标题】:how to render a response to a specific place on a gsp grails如何在gsp grails上呈现对特定位置的响应
【发布时间】:2016-10-31 01:32:56
【问题描述】:

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

欢迎任何链接或教程或直接“这样做”的回复。

我试图用谷歌搜索它,但我不知道该用什么作为搜索词,也找不到简明的答案。

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

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

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

我有一个使用 css 模板和另一个 gsp 模板进行布局的 gsp 页面。我可以在我的 gsp 页面中使用此代码 (sn-p) 在 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"]}"/> &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>

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

在附加的屏幕截图中:我想将结果放在显示“输出显示在此处...”的文本框中

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

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

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

谢谢。

铁螳螂7x

【问题讨论】:

  • 您能否提供一个示例来说明您要归档的内容?你的意思是一些 ajax 的东西吗?
  • 我不是指 Ajax 的东西。有没有办法在纯 graiks/groovy/css/html 中做到这一点???我还没有尝试过任何事情,因为我不确定我的问题是否清楚,所以我找不到任何示例。
  • @rvargas 我不是指 Ajax 的东西。有没有办法在纯 graiks/groovy/css/html 中做到这一点???我还没有尝试过任何事情,因为我不确定我的问题是否清楚,所以我找不到任何示例。
  • 那么,您有一个操作和一个 gsp,并且您想在同一个 gsp 的不同部分使用您发送到视图的内容?

标签: grails web rendering gsp


【解决方案1】:

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

<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 应用程序中使用引导主题。如何使用带有引导流主题的模板...???
  • 错误是什么?我从来没有遇到过 bootstrap 和 grails 模板的问题。
  • 当我添加以下行时: 我得到一个 java 空点异常。在我的 gsp 页面(来自引导主题)中,我有: 它显示了在哪里添加我的格式化 gsp 代码
  • 如果没有您应用于 gsp 页面的代码和完整的错误,很难弄清楚。如果您可以关闭此问题(或者如果您认为您可以得到更好的答案,则可以将其保持打开状态)并针对该错误提出另一个问题,那就太好了。
【解决方案2】:

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

看看属性更新:

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

您还可以在某些事件上触发 javascript,...

在 submitToRemote 按钮中调用的操作中,您可以渲染模板(但如果您渲染模板,请不要将布局放在此模板中,否则您将渲染所有网站结构......)显示在带有您在“更新”属性中的 ID 的 HTML 元素中。

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

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2019-06-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多