如何检查具有动态名称的 argument/collection 是否存在?
How to check if argument/collection with dynamic name exists?
在我的控制器中,我向模型添加了动态调用的属性,例如:
model.addAttribute("message"+singleMessage.getId()+"comments", messageComments);
所以在我的 jsp 视图中,我有 message1comments、message7comments、message457comments 等集合。
现在,当我在显示 ID 为 19 的消息时浏览消息集合时,我想通过检查 attribute/collection 之类的 "message19comments" 是否存在来检查它是否有任何评论。
问题是:怎么做?我不知道如何构造这样的名称并检查是否存在具有此名称的参数。我试过了:
<c:if test="${not empty "message"+message.id+"comments"}>
和其他一些东西但无济于事。当我打印
${requestScope}
我可以看到所有那些评论集。但是如何检查动态生成的名称是否存在?
A Map<messageId, listOfComments>
可以让您通过提供消息 ID 轻松调用与任何消息关联的评论列表,因此您可以尝试在模型中放置一个地图,如以下代码示例所示(调整它与你的数据类型):
Map<Long, List<Comment>> commentMap = new HashMap<>();
for (Message singleMessage : messages) {
/* retrieve messageComments for this singleMessage here */
commentMap.put(singleMessage.getId(), messageComments);
}
model.addAttribute("commentMap", commentMap);
然后,在 JSP 中您可以使用消息 ID 调用评论列表:
<c:if test="${not empty commentMap[YOUR_MESSAGE_ID_HERE]}>
另请参阅 Get value from hashmap based on key to JSTL 了解更多信息。
在我的控制器中,我向模型添加了动态调用的属性,例如:
model.addAttribute("message"+singleMessage.getId()+"comments", messageComments);
所以在我的 jsp 视图中,我有 message1comments、message7comments、message457comments 等集合。
现在,当我在显示 ID 为 19 的消息时浏览消息集合时,我想通过检查 attribute/collection 之类的 "message19comments" 是否存在来检查它是否有任何评论。
问题是:怎么做?我不知道如何构造这样的名称并检查是否存在具有此名称的参数。我试过了:
<c:if test="${not empty "message"+message.id+"comments"}>
和其他一些东西但无济于事。当我打印
${requestScope}
我可以看到所有那些评论集。但是如何检查动态生成的名称是否存在?
A Map<messageId, listOfComments>
可以让您通过提供消息 ID 轻松调用与任何消息关联的评论列表,因此您可以尝试在模型中放置一个地图,如以下代码示例所示(调整它与你的数据类型):
Map<Long, List<Comment>> commentMap = new HashMap<>();
for (Message singleMessage : messages) {
/* retrieve messageComments for this singleMessage here */
commentMap.put(singleMessage.getId(), messageComments);
}
model.addAttribute("commentMap", commentMap);
然后,在 JSP 中您可以使用消息 ID 调用评论列表:
<c:if test="${not empty commentMap[YOUR_MESSAGE_ID_HERE]}>
另请参阅 Get value from hashmap based on key to JSTL 了解更多信息。