我是grails和groovy的新手。我正在尝试找出如何在相同的gsp中从grails控制器中的操作中呈现响应-但在gsp的不同部分-作为接受请求的gsp(在这种情况下是Web表单gsp页面)?
欢迎任何链接或turorials或直接回复“do this”。
========= background with my code attempt) =========
这是我正在使用的代码。这是一个Grails应用程序,我在其中使用了一个引导模板(当然可以在互联网上免费获得)。
现在,功能的实际代码本身起作用了。我的问题是:
我有一个gsp页面,使用css模板和另一个gsp模板进行布局(这来自引导主题)。我可以在我的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"]}"/>   <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>
我的问题是:它作为单独的页面工作得很好。我想将请求的结果呈现在与调用请求相同的页面上。
我假设grails中的模板是实现它的方法;但是当我尝试将模板插入到代码的那一部分时,我得到了一个Java的空指针异常。
这是模板gsp代码:
<div>
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>--}%
</div>
=======更新:添加控制器代码===========控制器:
package hellograils
import org.springframework.http.HttpMethod
import org.springframework.web.client.RestTemplate
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import java.util.Base64;
import java.util.Map;
import static javax.xml.bind.DatatypeConverter.parseString;
class ApiStartController {
def index() {
}
def save() {
def apiStart = new ApiStart(params)
apiStart.save()
render (view: "apiStart", model: [apiStart: apiStart])
System.out.println(apiStart.url);
System.out.println(apiStart.passWord);
System.out.println(apiStart.userName);
RestTemplate restTemplate = new RestTemplate();
System.out.println ("URI under Test is: " + String.valueOf(apiStart.url) + ". \n" + "Please stand by for results ... \n \n ");
//String linkUT = apiStart.url;
// apiStart.result3 = restTemplate.exchange(apiStart.url, HttpMethod.GET, null, String.class).getBody();
// apiStart.response3 = restTemplate.exchange(apiStart.url, HttpMethod.GET, null, String.class).getStatusCode();
if (apiStart.protocolType == "GET") {
apiStart.result3 = restTemplate.exchange(apiStart.url, HttpMethod.GET, null, String.class).getBody();
apiStart.response3 = restTemplate.exchange(apiStart.url, HttpMethod.GET, null, String.class).getStatusCode();
render(view: "apiStart", model:[apiStart: apiStart])
System.out.println(apiStart.protocolType);
System.out.println(apiStart.result3);
System.out.println(apiStart.response3);
}
else if (apiStart.protocolType == "POST") {
//apiStart.result3 = restTemplate.exchange(apiStart.url, HttpMethod.POST, request, String.class).getBody();
apiStart.result3 = restTemplate.execute(apiStart.url, HttpMethod.POST, null, String.class).getBody();
apiStart.response3 = restTemplate.exchange(apiStart.url, HttpMethod.POST, null, Map.class).getStatusCode();
// apiStart.result3 = restTemplate.exchange(apiStart.url, HttpMethod.POST, null, String.class).getBody();
// apiStart.response3 = restTemplate.exchange(apiStart.url, HttpMethod.POST, null, String.class).getStatusCode();
render(view: "apiStart", model:[apiStart: apiStart])
System.out.println(apiStart.protocolType);
System.out.println(apiStart.result3);
System.out.println(apiStart.response3);
}
else if (apiStart.protocolType == "PUT") {
render(view: "apiStart", "coming soon ....")
System.out.println(apiStart.protocolType);
System.out.println(apiStart.result3);
System.out.println(apiStart.response3);
}
else if (apiStart.protocolType == "DELETE") {
render(view: "apiStart", "coming soon ....")
System.out.println(apiStart.protocolType);
System.out.println(apiStart.result3);
System.out.println(apiStart.response3);
}
}
}
=============控制器代码结束==================
这是域控制器代码:
================ 域模型代码 ==========================
域:
package hellograils
class ApiStart {
String url
String userName
String passWord
String result3
String response3
String header1
String header2
String value1
String value2
String protocolType
// static constraints = {
// }
}
================域结束================
有人能给我建议并告诉我最好的方法吗?
谢谢。
ironmantis7x
在gsp中包含结果窗格,但用g: if标签包装它。提供一个标志变量来确定grails是否呈现输出的该部分。
<g:if test="${apiStart != null}">
<div class="textarea">
<label>Output</label><br>
<g:textArea name="myField" value="${apiStart.result3}" />
</div>
</g:if>
在编辑方法中,将apiStart定义为:
def apiStart = params.apiStart
最初渲染编辑视图时,不应显示“结果”窗格。
在save方法中,执行任何操作,定义apiStart映射,填充它,并重定向到将apiStart作为参数传递的编辑方法。
redirect(view:'edit', params:[apiStart:apiStart])
或者类似的。没有看到你的控制器代码。。。
我想在Spring中创建一个符合REST的endpoint。endpoint应该允许分页。 请求非常简单,是否访问url/资源?页码=1 我发现了两种返回数据的大方法: 返回包含以下内容的自定义对象: 此方法的问题是它不再返回资源,而是返回资源的包装器。 这解决了资源问题,但它使endpoint更难使用,这是违反直觉的,因为它也需要额外的工作来实现。 我想知道,什么标准被更广泛地使用,为什么?对此
问题内容: 我是ajax的新手。我试图将请求从我的gsp页面发送到控制器操作。但是我失败了。它没有调用控制器操作,并且页面正在重新加载。任何人都可以看看这个并提供帮助。这是我的以下页面>>> 这是我的控制器动作>>> 问题答案: 您可以尝试以下方法: 或这一个: 根据要求完成ajax调用:
当我将grails(2.4.0)项目war部署到weblogic 12.1.2中时,我面临一个问题。当部署到tomcat中时,战争效果非常好。问题是,当战争部署在weblogic中时。一旦用户登录,使用LDAP的身份验证过程也可以正常工作。接下来,应该使用GSP页面呈现主页,但weblogic似乎无法呈现GSP页面。它正在浏览器上运行404。 一旦我登录到应用程序,如果我直接使用浏览器中的任何UR
我正在尝试使用Spring Security性和AngularJS设置默认SuccessUrl,但是成功登录后,html页面将加载到网络中,但没有显示。这是我的安全配置 但是,我仍然显示登录页面,而不是hello.jsp页面。登录的Angular服务: 有人知道为什么吗?
问题内容: 我正在尝试使用Electron(以前是Atom Shell)为Twitter写一个包装。 我的文件(它看起来与“ Hello World ”示例几乎相同,只是在一个地方进行了更改): 我尝试在此之后立即调用函数,但是它不执行。 我了解该文件就像应用程序的服务器端一样,但是问题是…如何在页面上调用JavaScript函数?我应该在哪里编写代码? 例如,我要执行以下操作: 问题答案: 我已
我正在用空手道测试做一些测试。 首先是一个职位,期待一个201和一个位置。 第二,使用位置from response来执行get。 有人知道我怎么用空手道吗? 下面的代码是我的尝试,在许多其他代码之后。 但是我得到了: 我不明白为什么。 [编辑] 经过彼得的建议,我感谢! 打印返回: 08:59:33.610[主]信息网。凭直觉。空手道-[打印][”https://www.test.com/enp