2015-07-03 28 views
0

我正在使用下面的代码来创建一个循环,并使用if来创建制表符。未封闭的gsp表达式,空指针,即使它不是

<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> 

但是,它表明无法获得空对象 财产“TASK_NAME”我已经确认它不是空对象通过写它作为

${task_list[1].task_name} 

使用

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

它显示

我已经尝试

未封闭的GSP表达。

+0

'$ {扩大2 .. task_number}'不该”没有空间。它应该是'$ {2..task_number}'......这可能是一个问题。 –

+0

我已经试过了。不是这样 – adi

回答

0

首先,我敢肯定,你知道你跳过任务#1,除此之外,我会默认保存范围检索是这样的:

(2..task_number).toList() 

这是syntacticly矫枉过正,但会做这项工作。

这也将是有意义的打印出来的i当前值(例如${i}某处g:each后)

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

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任务会直接默认

相关问题