gpt4 book ai didi

conditional - JSTL:检查属性是否不存在

转载 作者:行者123 更新时间:2023-12-04 02:37:58 24 4
gpt4 key购买 nike

我在 jsp 页面上被阻止,我们的 1 位 java 工程师现在无法提供帮助。

有一个名为“module-review.jsp”的模板在 2 个实例中加载,通过普通页面加载和通过 api 返回它作为 json 对象的一部分。

有一个名为“review.updatedDate”的变量。在普通页面 View 中,此变量作为 HashMap 加载到页面中,如下所示:

{_value=2009-07-02 11:54:30.0, class=sql-timestamp}

所以如果我想要日期值,我使用 ${review.updatedDate._value}

但是,当 module-review.jsp 被 API 加载时,日期值直接作为日期对象返回,其中 ${review.updatedDate} 直接返回日期值。

我需要一组条件语句,仅在 ._value 存在时才显示 ${review.updatedDate}。我尝试过的所有操作都给我错误,即 ._value 不存在,这很讽刺。

我目前正在尝试使用它,但在第二次有条件时失败了:

<c:if test="${ (not empty review.updatedDate['_value']) }">
${review.updatedDate._value}
</c:if>

<c:if test="${ (empty review.updatedDate['_value']) }">
${review.updatedDate}
</c:if>

最佳答案

除了“不要那样做”之外,我猜你可以测试 updatedDate 的类型:

<c:choose>
<c:when test="${review.updatedDate.class.name == 'java.util.Date'}">
Date: ${review.updatedDate}
</c:when>
<c:otherwise>
Map: ${review.updatedDate._value}
</c:otherwise>
</c:choose>

...假设日期是 Date 的实例类(class)。奇怪的是,当我尝试测试 java.util.HashMap 时,这种方法不起作用。


也许更可靠的方法是将测试交给 Java 类:

package typetest;

import java.util.Map;

public class TypeUtil {

public static boolean isMap(Object o) {
return o instanceof Map;
}

}

这可以通过 TLD 文件(例如 WEB-INF/maptest.tld)映射到自定义函数:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://typeutil</uri>
<function>
<name>isMap</name>
<function-class>typetest.TypeUtil</function-class>
<function-signature>boolean isMap(java.lang.Object)</function-signature>
</function>
</taglib>

导入函数的示例 JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="myfn" uri="http://typeutil"%>
<html>
<body>
<c:choose>
<c:when test="${myfn:isMap(review.updatedDate)}">
Map: ${review.updatedDate._value}
</c:when>
<c:otherwise>
Date: ${review.updatedDate}
</c:otherwise>
</c:choose>
</body>
</html>

关于conditional - JSTL:检查属性是否不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com