Grails GSP 空指针安全检查问题

3

我正在尝试在我的GSP上填充文本字段,如下所示:

<label>Phone(aaa-bbb-cccc):</label>&nbsp<g:textField name="phone" style ="border-radius: 5px" 
                    value="${recordToEdit.telephones = [] ? null : recordToEdit.telephones.first()}"></g:textField><br> 

但它仍告诉我无法在空列表上访问first()。telephones是一个字符串列表,每个字符串都是电话号码。

3个回答

5
正如@gross-jonas所指出的那样,recordToEdit.telephones = [] ? .. : ..已经严重错误,除非这是个打字错误。
你试图进行的检查应该像这样:

value="${recordToEdit.telephones ? recordToEdit.telephones.first() : ''}"

或者
value="${recordToEdit.telephones?.getAt( 0 ) ?: ''}"

4

您可以使用Null Safe Operator(?.)作为

${recordToEdit.telephones?.first()}

针对空值检查,这是不够的。

更新

针对空列表检查和空值检查,

${ recordToEdit.telephones ? recordToEdit.telephones[0] : '' }

会很好。


[].first() 抛出 NoSuchElementException 异常,因此空安全检查并不能帮助太多。 - injecteer
@injecteer 有点冲动了(可能是因为我今天早上还没喝咖啡)。你说得对。已经更新了。 - dmahapatro
下标运算符有一个小陷阱 :) - injecteer

1
伙计,你想说的是==而不是=吧?
看起来你正在覆盖已经成功分配的telephones而不是进行比较。

相反的符号肯定会有帮助 >) - injecteer

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