首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果-不能索引为空值

如果-不能索引为空值
EN

Stack Overflow用户
提问于 2022-06-22 14:33:21
回答 1查看 158关注 0票数 0

胸腺生长因子index.xhtml -

EL1012E:不能索引为空值

代码语言:javascript
复制
<div class="mylist" th:each="row,rowStat : *{dataList}">
   Folder: <span th:text="*{dataList[__${rowStat.index}__].folderName}" />
   <div class="invalid-feedback"
        th:if="${dataList[__${rowStat.index}__].folderName == appFolderName}">                           
        Folder already exists. Please choose different folder name.
   </div>
</div>

它显示的是folderName,而不是验证th:if,而appFolderName是一个模型属性值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 17:32:32

对于th:each="row,rowStat : *{dataList}"迭代器,我会将该代码简化为:

代码语言:javascript
复制
th:each="row : ${dataList}"

您可以认为这与以下Java循环大致等价:

代码语言:javascript
复制
List<DataItem> dataList = ...; // assume this is populated with DataItems

for (DataItem dataItem : dataList) {
    System.out.println(dataItem.getFolderName());
}

在上面的for -循环中,我们不需要按索引访问列表,Thymeleaf语法也是如此。

Thymeleaf允许您访问对象中的字段,而无需引用getter方法。

因此,既然我们有了来自rowth:each="row : ${dataList}"变量,我们就可以这样做了:

代码语言:javascript
复制
<div class="mylist" th:each="row,rowStat : *{dataList}">
    Folder: <span th:text="${row.folderName}" />
    <div class="invalid-feedback"
         th:if="${row.folderName == appFolderName}">                           
        Folder already exists. Please choose different folder name.
    </div>
</div>

在上面的代码中,您可以看到${row.folderName} -这意味着Thymeleaf将在row对象上调用getFolderName()方法。这依赖于您的对象使用JavaBean命名标准为您的getter。

您可以通过添加第二个变量来增强Thymeleaf th:each处理器--这就是您在问题中所做的:rowStat

代码语言:javascript
复制
th:each="row,rowStat : ${dataList}"

这使您可以访问有关Thymeleaf迭代器状态的额外信息--您可以看到所有这些额外数据值的列表这里

在您的情况下,不需要这些额外的值。但是它们在其他情况下可能很有用--例如,如果您想要标识列表中的firstlast记录,或者所有even记录,等等。

问题中的示例使用了__${...}__ 预处理语法,它非常强大,非常有用。但是,您的基本功能并不需要它。

您的示例使用${...}*{...}语法来创建Thymeleaf变量。理解它们之间的基本区别是很重要的。

描述星号语法的文档中包含了这种差异。

星号语法计算选定对象的表达式,而不是整个上下文。也就是说,只要没有选定的对象,美元和星号语法就会完全相同。选择的对象是什么?使用th:object属性的表达式的结果。

文档中有一些例子。

最后,因为您使用的是Spring (根据您的问题中的标记),那么您实际上使用的是Spring的Thymeleaf和SpEL方言-- 弹簧表达式语言

这与标准(非Spring) Thymeleaf方言使用的标准(OGNL)表达式语言大致相似,但它有几个非常有用的增强功能。

其中一个改进是我在评论中提到的安全航行操作员

代码语言:javascript
复制
${row?.folderName}

在这里,如果?null,则row将立即返回null。如果没有这种情况,当Thymeleaf试图在空getFolderName()对象上调用row方法时,您将得到一个空指针异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72717450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档