如何检查message-key是否为空?

时间:2015-12-15 10:14:24

标签: java jsp jstl

我的.jsp文件中有以下内容:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
...
<fmt:message key="mykey.${country}" />

对于某些国家/地区,此密钥存在且消息按预期显示,而对于其他国家/地区则不存在。如果它不存在,我得到以下输出:

???mykey.DE??? 
我不想要的。如果密钥不存在,我希望没有输出。

mykey.${country}解析为

  • mykey.DE
  • mykey.SE
  • mykey.US
  • mykey.GB
  • ...

我不知道它会是哪一个但是我需要检查它是否作为变量存在。

有没有办法检查这个或隐藏不需要的输出?

到目前为止我尝试了什么:

我试图用

包围它
<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>

但检查无效。

2 个答案:

答案 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>