GSP: 检查模型(变量)是否为空不起作用

16

我是grails(1.3.7)的新手,正试图让一些东西工作起来:

在我的控制器中,我返回了一些列表,我想在我的gsp中访问它们。访问是有效的,但我只想在它们不为空时才访问它们。检查列表是否为空不起作用。

这是我的控制器返回的内容:

return new ModelAndView("/questions/questions", [ questionsList101 : allQuestions101, questionsList102 : allQuestions102, ... ])

allQuestions对象是“def allQuestions..”,其中包含Questions对象(数据库对象)。

现在在我的gsp上,我尝试以下操作:

<g:if test="${!empty questionsList101}">  101:<br/>
<g:each in="${questionsList101}" var="elem" status="i">
  <g:checkBox name="${questionsList101[i].id}" value="${questionsList101[i].id}"/>${questionsList101[i].id}<br/>
</g:each>
<br/>
</g:if>

循环是有效的,但检查是否为空却没有起作用。我尝试使用“not empty”、“!empty”等方式,但不知道出了什么问题!非常感谢任何帮助!:-)

2个回答

37

16

在GSP中,您可以在${}表达式中完全使用Groovy。 如果需要,您可以对自己的对象进行正确的方法调用。 尝试一下:

<g:if test="${questionsList101 != null && !questionsList101.isEmpty()}">

我尝试了第一个方法,它只适用于非空列表 - 很有趣。否则,我会收到这个错误消息:Error processing GroovyPageView: Error executing tag <g:form>: Cannot invoke method isEmpty() on null object :-) 另一个方法也是一样的。如果对象为空,我无法调用它们 - 非常有趣... - nano7
看起来你只需要一个空值检查。我会更新我的答案。 - Jon Quarfoth
2
如果你正在使用Grails,那么用Groovy的方式来写怎么样? ${! questionsList101?.isEmpty()} (注意null检查符号?) - billjamesdev
谢谢。我知道有更好的方法,但是我脑子有点短路,所以想着给他快速解决问题。 - Jon Quarfoth
1
然而,经过进一步的调查,${! questionsList101?.isEmpty()} 似乎无法处理空值情况。我现在会将其改回不那么 groovy 的方式... - Jon Quarfoth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接