Java 如何检查消息键是否为空?

Java 如何检查消息键是否为空?,java,jsp,jstl,Java,Jsp,Jstl,我的.jsp文件中有以下内容: <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> ... <fmt:message key="mykey.${country}" /> 这是我不想要的。如果密钥不存在,我希望没有输出 mykey.${country}决定 我的钥匙 mykey.SE mykey.US mykey.GB ... 我不知道它将是哪一个,但我需要检查它是否作为变量存在 有没有办法检

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

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
...
<fmt:message key="mykey.${country}" />
这是我不想要的。如果密钥不存在,我希望没有输出

mykey.${country}决定

我的钥匙 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>
但是检查没有按预期的那样工作。

这是我的密钥。${country}这是正确的格式吗?要么使其低于格式,要么首先将值输出到本地变量

<c:if test="$(not empty mykey.country)">
  <fmt:message key="mykey.country" />
一些提示 如果您的参数存在/不为空:

<c:if test="${param.yourParam != null}"></c:if>
如果您的参数不存在/为空

<c:if test="${param.yourParam == null}"></c:if>
如果您的参数不为空,则字符串不为空且不为null

<c:if test="${!empty param.yourParam}"></c:if>
如果您的参数为空字符串或null

<c:if test="${empty param.yourParam}"></c:if>
这是我的钥匙。${country}格式正确吗?要么使其低于格式,要么首先将值输出到本地变量

<c:if test="$(not empty mykey.country)">
  <fmt:message key="mykey.country" />
一些提示 如果您的参数存在/不为空:

<c:if test="${param.yourParam != null}"></c:if>
如果您的参数不存在/为空

<c:if test="${param.yourParam == null}"></c:if>
如果您的参数不为空,则字符串不为空且不为null

<c:if test="${!empty param.yourParam}"></c:if>
如果您的参数为空字符串或null

<c:if test="${empty param.yourParam}"></c:if>
你可以试试这个:

<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=""/>
你可以试试这个:

<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=""/>

如果我把它放在一个局部变量中,比如。然后我不需要检查localVar是否为空,我知道它不是空的-我需要检查保存到localVar的变量名称,我猜是这样的?问题是我构建了一个字符串,它将是我想要检查的变量名。这个答案是错误的。OP不想检查密钥是否为空。OP想检查与键关联的值是否为空。然后我不需要检查localVar是否为空,我知道它不是空的-我需要检查保存到localVar的变量名称,我猜是这样的?问题是我构建了一个字符串,它将是我想要检查的变量名。这个答案是错误的。OP不想检查密钥是否为空。OP想检查与键关联的值是否为空。哇。请原谅我没有先搜索现有的答案,但这不是OP应该做的吗?作为奖励,我将把我的定制标签放在这里。我认为这是一种相当普遍的方法。我不愿意承认我甚至在taglib上使用了我的前缀…哇。请原谅我没有先搜索现有的答案,但这不是OP应该做的吗?作为奖励,我将把我的定制标签放在这里。我认为这是一种相当普遍的方法。我不愿意承认我甚至在标记库上使用了我的前缀。。。