gpt4 book ai didi

grails - gsp文件中服务中的方法无法正常工作

转载 作者:行者123 更新时间:2023-12-02 15:21:53 26 4
gpt4 key购买 nike

我有一个带有两个按钮的列表,我希望每次我按一个按钮时,都要处理与该按钮关联的代码。该代码在服务中,并且gsp文件是默认列表。

从gsp调用服务。我接受了这篇文章:( How do I call a Grails service from a gsp?)去做。

问题是我在服务中有两个方法,我不知道为什么,但是总是我输入list.gsp并总是我按按钮,我可以看到在grails控制台中显示的是这两个方法同时工作。

这是我每次按下按钮A或B时都可以在控制台中看到的内容:

2015-12-01 12:51:47,565 [http-bio-8090-exec-5] 
hello
world

我想要的是,如果我按下按钮A,请显示以下内容:
2015-12-01 12:51:47,565 [http-bio-8090-exec-5] 
hello

如果我按下按钮B,请显示以下内容:
2015-12-01 12:51:47,565 [http-bio-8090-exec-5] 
world

这就是我每次运行并输入gsp.file时都可以在控制台中看到的,并且我希望不要运行该代码,除非按下按钮:
2015-12-01 12:51:47,565 [http-bio-8090-exec-5] 
hello
world

提前致谢

这是我在gsp中的代码:
<%@ page import="com.app.test" %>
<%@ page import="mypackage.myService" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'licenseType.label', default: 'LicenceType')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<a href="#list-licenseType" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></a>
<div class="nav" role="navigation">
<ul>
<li><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>

<% def LicenceTypeService =
grailsApplication.classLoader.loadClass('mypackage.myService').newInstance()%>

<li><g:link action="list"><g:message code="Calculate Licence Type" args="[entityName]" /><span>${myService.calculate()}</span></g:link></li>
<li><g:link action="list"><g:message code="Re-Calculate Licence Type" args="[entityName]" /><span>${myService.recalculate()}</span></g:link></li>
</ul>
</div>

在服务中:
class MyService {

def calculate(){
println "hello"
}

def recalculate(VoiceUser vUser){
println "world"
}

}

最佳答案

我可以肯定这是不可能的;您要问的是直接将Ajax call 发送到grails服务。如果您考虑一下,一旦客户端接收到生成的HTML,浏览器和后端(grails应用程序)之间就不会直接建立连接,因此不会有任何grails魔术使这种情况发生。

有一个grails标记g:remoteLink,它允许Ajax调用 Controller Action ,这时 Controller 是必需的,因为一旦生成的html到位,所有新交互都必须通过标准HTTP请求,并且请求是通过grails Controller 处理的。

最好的选择是创建一个包装这2个服务方法的 Controller ,并将操作与g:remoteLink或另一个Ajax请求一起使用。

至于在gsp中使用服务,而不是实例化新服务,我会主张使用现有的spring bean。

更换:

<%@ page import="mypackage.myService" %>
...
<% def LicenceTypeService = grailsApplication.classLoader.loadClass('mypackage.myService').newInstance()%>

带有:
<g:set var="myService" bean="myService"/>

关于grails - gsp文件中服务中的方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34021097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com