我有一个包含消息的 XML,例如:
<?xml version="1.0" ?>
<messages>
<hello>Hi {1} welcome to {2}</hello>
</messages>
所以我想用一些 JSP 变量替换 {1} 和 {2} 并打印结果:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
/* set vars */
<c:set var="name" value="John Doe" />
<c:set var="location" value="Internet" />
/* import and parse xml */
<c:import url="messages.xml" var="messages" />
<x:parse xml="${messages}" var="xml" />
/* print message */
<x:out select="$xml/messages/hello" var="name" var="location" />
最后一行的结果应该是:
Hi John Doe welcome to Internet
我正在努力让它工作,但我完全迷失了。你能帮我解决这个问题或者给我这个“技术”的名称以继续寻找信息吗?
谢谢!
最佳答案
此类任务通常称为“国际化”或“模板化”。
这是一种使用现有代码执行此操作的简单方法:
<c:set var="helloTemplate">
<x:out select="$xml/messages/hello" />
</c:set>
<c:out value="<%= java.text.MessageFormat.format(helloTemplate,
pageContext.getAttribute("name"),
pageContext.getAttribute("location")) %>" />
使用 scriptlet (<%= .. %>)
在 JSP 中并不是最好的处理方式,相反,您可以创建一个在内部使用 MessageFormat 的函数/标签。创建自定义标签的示例:https://sites.google.com/a/pintailconsultingllc.com/java/custom-jsp-tag-libraries
或者,如果您可以控制消息文件,则可以使用属性文件而不是 xml 格式(例如 messages.properties
),其中将包含:
hello=Hi {1} welcome to {2}
然后可以按如下方式使用:
<fmt:message key="hello">
<fmt:param value="${name}" />
<fmt:param value="${location}" />
</fmt:message>
这通常被称为“国际化” - 更多信息:http://docs.oracle.com/cd/E19159-01/819-3669/bnaxu/index.html
关于java - 使用 JSP 和 XML 编写消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327317/