我有一些用于生成字符串翻译的jsp标签,例如<x:lang name="hello" />
将生成给定语言中“hello”的翻译。问题是,我需要能够在语言发生之前将语言和文件名传递给标记类。
是否有一种线程安全的方式将任何参数传递给文件顶部的tags类,然后它会记住并用于该类中所有未来的标记?
例如,在我的文件顶部,我希望能够做到这样的事情:
<x:myTag lang="english" file="signup" />
之后,每当我<x:myTag string="something" />
时,它应该知道我指的是英语,并在文件'注册'中查找字符串。
这可能吗?
答案 0 :(得分:2)
您可以使用范围为request
的JSTL中的<c:set>
。
<c:set scope="request" var="lang" value="english" />
然后在标签中,您可以使用带EL的值:${lang}
。
编辑:添加了更完整的示例。
JSP页面:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
<c:set scope="request" var="lang" value="english" />
<x:hello />
</body>
</html>
在hello标签中:
<c:choose>
<c:when test="${lang eq 'english'}">Hello World!</c:when>
<c:when test="${lang eq 'french'}">Bonjour le monde !</c:when>
</c:choose>
如果您使用java标记,则可以使用以下命令获取值:
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
String lang = (String) request.getAttribute("lang");