unclosed gsp表达式,空指针,即使它不是

时间:2015-07-03 05:20:23

标签: grails gsp

我使用以下代码制作循环并使用if来创建制表符。

<g:set var="task_list" value="${Task.findAllByEmployee_idAndProject_id(session.user.id,session.id_of_project)}"/>

            <g:set var="task_number" value="${task_list.size()}"/>

            <g:if test="${task_number}">
                <ul class="nav nav-tabs">

                <li class="active"><a data-toggle="tab" href="#demo1" aria-expanded="true">${task_list[0].task_name}</a></li>

                  <g:each var ="i" in="${2.. task_number }" >

                  <li class=""><a data-toggle="tab" href="#demo${i }" aria-expanded="false">${task_list[i]?.task_name}

                  </a></li>
                  </g:each>

                </ul>
            </g:if>

但是。它显示无法获取属性&#39; task_name&#39;在null对象上  我已经通过将其写为

来检查它不是空对象
${task_list[1].task_name}

我已经尝试过使用

`${task_list[${i}].task_name}`

显示

  

未披露的GSP表达。

2 个答案:

答案 0 :(得分:0)

首先,我确定你知道你跳过了#1的任务。除此之外,我默认使用这样的保存范围检索:

(2..task_number).toList()

这在语法上是一种矫枉过正,但会完成这项工作。

打印i的当前值(例如${i}之后某处的g:each

)也是有意义的

最后,我认为在该视图中加载视图所需的数据并不是一个好主意。这就是控制器和服务的用途。如果您确实需要在视图中加载数据,请将其包装在自定义标记中。

答案 1 :(得分:0)

我会将您的代码简化为:

          <ul class="nav nav-tabs">

            <g:each var="task" in="${task_list}" status="i">

              <li class=""><a data-toggle="tab" href="#demo${i}" aria-expanded="${0 == i}">${task.task_name}

              </a></li>
            </g:each>

          </ul>

因此,使用默认迭代功能,默认情况下会扩展第0个任务