JSTL Core fmt:使用包/属性文件的消息标签动态消息

Met*_*ead 19 java jsp jstl web-applications java-ee

我理解标准fmt:messageTag 的用法,即我们在JSP中定义这样的东西:

<fmt:setBundle basename="ResourceBundles.ValidationErrorMessages" var="errorMessages" />
<fmt:message key="${error.value}" bundle="${errorMessages}" />
Run Code Online (Sandbox Code Playgroud)

假设error.Value ="MQ2009"

我的名为"ValidationErrorMessages"的属性文件具有以下条目

MQ2009 = MQ time out
Run Code Online (Sandbox Code Playgroud)

现在我的要求就是拥有类似的东西

MQ2009 = Mq timeout happened for message {messagename}.
Run Code Online (Sandbox Code Playgroud)

我可以messagename动态定义变量吗?即在运行时,messagename将在请求范围中可用,它应该在属性文件中替换.

我怎样才能做到这一点?我是否需要自定义标记,或者Java EE是否提供了我不知道的此功能?

Jig*_*shi 36

您可以定义类似的属性

MQ2009 = Mq timeout happened for {0}
Run Code Online (Sandbox Code Playgroud)

然后

<fmt:message key="MQ2009" var="val" >
   <fmt:param value="${valueComingFromSomeParameter}"/>
</fmt:message>
Run Code Online (Sandbox Code Playgroud)

然后

<c:out value="${val}"/>
Run Code Online (Sandbox Code Playgroud)

  • 你不必使用`c:out`.带参数的消息将显示在`fmt:message`位置,如果只删除`var ="val"`part.比使用额外的c:out标签更方便. (6认同)

Bhe*_*ung 5

在你的属性文件中

MQ2009 = Mq timeout happened for message {0}
Run Code Online (Sandbox Code Playgroud)

然后你可以嵌套一个带有<fmt:param value="${messagename}"/>标签的<fmt:message标签, wheremessagename在请求范围内。