gpt4 book ai didi

grails - GSP 页面中的递归

转载 作者:行者123 更新时间:2023-12-03 21:47:20 27 4
gpt4 key购买 nike

我有一个域名

class Node {   

String nodeId
String label

Node parent
}

在 GSP 页面中,我想从根开始并打印其所有子项(请注意,我引用了父项而不是子项)。知道怎么做吗?对不起,我是新来的,真的很困惑。我想打印从 root(不是 root)开始的所有内容,而 root 没有父级(它的 null)。所以我写了

<g:each in="${nodes}" var="node">
<g:if test="${node.parent!=null}">

${node.label}
<g:render template="node" model="[nodes:Node.findAllByParent(node)]" />
</g:if>
</g:each>

在上面的代码中不确定 parent_node_intance 应该是什么。节点列表以根开头。我不想打印它,而是从以 root 为父级的所有其他内容开始。

node.gsp

<g:if test="${nodes}">
<ul>
<g:each in="${nodes}" var="node">
<li>
${node.label}
<g:render template="node" model="[nodes:Node.findAllByParent(node)]" />
</li>
</g:each>
</ul>
</g:if>

得到以下错误,我确定是由根引起的

2014-10-02 12:28:21,693 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver  - NullPointerException occurred when processing request: [GET] /taxonomy - parameters:
outputFormat: concept
hierarchyId: lp
Cannot invoke method findAllByParent() on null object. Stacktrace follows:
Message: Error evaluating expression [[nodes:Node.findAllByParent(node)]] on line [11]: Cannot invoke method findAllByParent() on null object
Line | Method
->> 11 | run in C:/Users/U6021072/Documents/workspace-ggts-3.6.0.RELEASE/ae-and-sdx-analysis-ui/target/work/plugins/taxonomy-toolkit-for-grails-0.02-SNAPSHOT/grails-app/views/taxonomy/concept.gsp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caused by NullPointerException: Cannot invoke method findAllByParent() on null object
->> 11 | doCall in C__Users_U6021072_Documents_workspace_ggts_3_6_0_RELEASE_ae_and_sdx_analysis_ui_target_work_plugins_taxonomy_toolkit_for_grails_0_02_SNAPSHOT_grails_app_views_taxonomy_concept_gsp$_run_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread

最佳答案

那么,您想打印所有具有已知父节点的节点吗?

比如:

<g:each in="${Node.findAllByParent(parent_node_instance)}" var="node">
${node}<br>
</g:each>

但是既然你在谈论递归,我想你也想打印所有后代。

创建一个 _node.gsp模板:

<g:each in="${nodes}" var="node">
${node}<br>
<g:render template="node" model="[nodes:Node.findAllByParent(node)]" />
</g:each>

并调用:

<g:render template="node" model="[nodes:Node.findAllByParent(parent_node_instance)]" />

您可以轻松地向模型添加深度变量以正确缩进每一代,或者使用 <ul><li>模板中的元素。

parent_node_instance是您要从中开始打印树的根,它可以是绝对根或树中的任何节点。

findAllByParent()是一个动态查找器函数。参见 http://grails.org/doc/latest/guide/GORM.html#finders了解详情。

关于grails - GSP 页面中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129073/

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