gpt4 book ai didi

grails - 将 src/groovy 类中的值设置为域类属性

转载 作者:行者123 更新时间:2023-12-02 20:34:38 26 4
gpt4 key购买 nike

我正在使用 groovy 和 grails 开发crawler4j。​​

我在 src/groovy 中有一个 BasicCrawler.groovy 类、域类 Crawler.groovy 和一个名为 CrawlerController.groovy 的 Controller 。

我在 BasicCrawler.groovy 类中有一些属性,例如 urlparentUrldomain 等。

我想通过在爬行发生时将这些值传递给域类来将这些值保留到数据库中。

我尝试在 src/groovy 下的 BasicCrawler 类中执行此操作

class BasicCrawler extends WebCrawler {
Crawler obj = new Crawler()
//crawling code
@Override
void visit(Page page) {
//crawling code
obj.url = page.getWebURL().getURL()
obj.parentUrl = page.getWebURL().getParentUrl()
}

@Override
protected void handlePageStatusCode(WebURL webUrl, int statusCode, String statusDescription) {
//crawling code
obj.httpstatus = "not found"
}
}

我的域类如下:

class Crawler extends BasicCrawler {
String url
String parentUrl
String httpstatus
static constraints = {}
}

但我收到以下错误:

ERROR crawler.WebCrawler  - Exception while running the visit method. Message: 'No such property: url for class: mypackage.BasicCrawler
Possible solutions: obj' at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)

在此之后我尝试了另一种方法。在我的 src/groovy/BasicCrawler.groovy 类中,我在顶部声明了 urlparentUrl 属性,然后使用数据绑定(bind)(我可能是错的,因为我只是一个初学者):

class BasicCrawler extends WebCrawler {
String url
String parentUrl

@Override
boolean shouldVisit(WebURL url) { //code
}

@Override
void visit(Page page) { //code
}

@Override
protected void handlePageStatusCode(WebURL webUrl, int statusCode, String statusDescription) {
//code}
}
def bindingMap = [url: url , parentUrl: parentUrl]
def Crawler = new Crawler(bindingMap)
}

我的Crawler.groovy域类如下:

class Crawler {
String url
String parentUrl
static constraints = {}
}

现在,它没有显示任何错误,但这些值没有保留在数据库中。我使用 mongodb 作为后端。

最佳答案

我认为这个例子有点做作,但在当前情况下,您可以通过以下方法解决此问题:

class BasicCrawler extends WebCrawler {
@Override
void visit(Page page) {
Crawler obj = new Crawler()
obj.url = page.getWebURL().getURL()
obj.parentUrl = page.getWebURL().getParentUrl()
obj.save()
}

@Override
protected void handlePageStatusCode(WebURL webUrl, int statusCode, String statusDescription) {
Crawler obj = Crawler.findByUrl(webUrl)
obj.httpstatus = "not found"
obj.save()
}
}

这里的关键不是使用成员实例变量,而是使用 URL 来“重新获取”并更新“访问”的原始站点,因为我假设这将是每一行的唯一约束。

关于grails - 将 src/groovy 类中的值设置为域类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492903/

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