我的.jsp文件中有以下内容:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
...
<fmt:message key="mykey.${country}" />
对于某些国家/地区,此密钥存在且消息按预期显示,而对于其他国家/地区则不存在。如果它不存在,我得到以下输出:
???mykey.DE???
我不想要的。如果密钥不存在,我希望没有输出。
mykey.${country}
解析为
我不知道它会是哪一个但是我需要检查它是否作为变量存在。
有没有办法检查这个或隐藏不需要的输出?
到目前为止我尝试了什么:
我试图用
包围它<c:if test="$(not empty mykey.${country})">
<fmt:message key="mykey.${country}" />
</c:if>
但它不起作用:即使密钥存在,也不会显示消息。
我还尝试将其放入局部变量中:
<c:set var="localVar" value="mykey.${country}" />
<c:out value="${localVar}" /> <!-- this prints 'mykey.DE' correctly -->
<c:if test="!empty ${localVar}">
<div style="padding-top:10px;">
<fmt:message key="mykey.${country}" />
</div>
</c:if>
但检查无效。
答案 0 :(得分:3)
你可以试试这个:
<c:set var="localvar"><fmt:message key="mykey.${country}" /></c:set>
<c:if test="${!fn:startsWith(localvar,'???')}">
${localvar}
</c:if>
但是,不是很漂亮。另一种选择可能是编写自定义消息标记:
<%@ tag body-content="empty" %>
<%@ attribute name="key" required="true" %>
<%@ attribute name="defaultvalue" required="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="msg"><fmt:message key="${key}" /></c:set>
<c:choose>
<c:when test="${!fn:startsWith(msg,'???')}">
${msg}
</c:when>
<c:otherwise>
${defaultvalue}
</c:otherwise>
</c:choose>
然后使用如下:
<my:message key="mykey.${country}" defaultvalue=""/>
答案 1 :(得分:1)
这个mykey.${country}
格式是否正确?要么使其低于格式,要么首先将值输出到本地var。
<c:if test="$(not empty mykey.country)">
<fmt:message key="mykey.country" />
如果yourParam存在/不为null:
<c:if test="${param.yourParam != null}"></c:if>
如果yourParam不存在/为空
<c:if test="${param.yourParam == null}"></c:if>
如果yourParam不为空(不是空字符串且不为空)
<c:if test="${!empty param.yourParam}"></c:if>
如果yourParam为空(空字符串或空)
<c:if test="${empty param.yourParam}"></c:if>