我想根据当前Locale的值包含js文件。我试图从JSP访问它,如下所示:
<%@ page import="java.util.Locale" %>
<% if( ((Locale) pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)).getLanguage().equals("de")) { %>
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
<% } else { %>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
<% } %>
但是,我收到了java.lang.NullPointerException
,因为pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)
是NULL
。
有谁知道如何解决这个问题?
答案 0 :(得分:19)
目前我正在使用它:
<c:set var="localeCode" value="${pageContext.response.locale}" />
稍后可以使用${localeCode}
可以在 scriptlet 中查询localeCode
变量,其中包含:
<%
Object ob_localeCode = pageContext.getAttribute("localeCode");
if (ob_localeCode != null) {
String currentLanguageCode = (String) ob_localeCode;
}
//more code
%>
我目前正在使用spring 2.5配置。
因此,回到原来的问题,你可以实现类似的东西:
<c:set var="localeCode" value="${pageContext.response.locale}" />
<c:choose>
<c:when test="$localecode == 'de' }">
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
</c:when>
<c:otherwise>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
</c:otherwise>
</c:choose>
或者如果您真的想使用一些简短的代码来打动您的同事,您可以这样做:
<c:set var="localeCode" value="${fn:toUpperCase(pageContext.response.locale)}" />
<c:set var="availLanguages" value="EN,DE" />
<c:if test="${!fn:contains(availLanguages,localeCode)}">
<c:set var="localeCode" value="EN" />
</c:if>
<script src="../themes/administration/js/languages/i18n{$localeCode}.js" type="text/javascript"> </script>
答案 1 :(得分:4)
尝试
<s:if test="#request.locale.language=='us'">
<s:select name="gender" list="#{'M':'Male','F':'female'}" ></s:select>
</s:if>
答案 2 :(得分:3)
Struts将语言环境放入会话中。获取区域设置的正确方法是:
Locale locale = (locale)request.getSession().getAttribute(Globals.LOCALE_KEY);
答案 3 :(得分:2)
我在Struts 1.x文档中找不到常量org.apache.struts.action.LOCALE
- 应该是org.apache.struts.Globals.LOCALE_KEY
吗?或者其他LOCALE_KEY
常量之一?
修改:org.apache.struts.action.LOCALE
是org.apache.struts.Global.LOCALE_KEY
的值 - 因此用作密钥的值本身不应该是问题。
验证LOCALE
中是否设置了Request
。我的理解是LOCALE_KEY
如果已设置,则会在PageContext.SESSION_SCOPE
中设置。
答案 4 :(得分:1)
在Struts2中,使用EL I成功使用:
${sessionScope["org.apache.struts2.action.LOCALE"]}
E.g。输出区域设置的值:
<c:out value='${sessionScope["org.apache.struts2.action.LOCALE"]}'/>
答案 5 :(得分:1)
我添加了新的例子来澄清这一点,因为这篇文章对我没什么帮助。
从jsp获取语言环境:
<%=request.getLocale()%>
它是一个ServletRequest方法a根据Accept-Language标题,返回客户端将接受内容的首选语言环境
Struts2 Locale: <s:property value="#request.locale"/>
返回Struts2 Framework的语言环境,该语言环境可能与前一个示例中的相同或不同。如果你传递param request_locale = de例如......
<s:url id="localeDE" namespace="/">
<s:param name="request_locale" >de</s:param>
</s:url>
<s:a href="%{localeDE}" >German</s:a>
struts2#request.locale将更改为德语覆盖原始Accept-Language标头的值
答案 6 :(得分:1)
试试这个
<s:if test='locale.toString() == "si"'>
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
</s:if>
<s:elseif test='locale.toString() == "ta"'>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
</s:elseif>
<s:else>
ANOTHER SCRIPT
</s:else>
答案 7 :(得分:0)
Ken G.指出答案。
pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.SESSION_SCOPE)
应该使用
pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)
答案 8 :(得分:0)
<%@page import="java.util.Locale"%>
<%@page import="org.apache.struts.Globals"%>
<%Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
if (locale.getLanguage().equals("fr")) {%>
<script language="JavaScript" src="lib/js/dateofday.js" type="text/javascript"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-fr.js"></script>
<%} else {%>
<script language="JavaScript" src="lib/js/dateofday-en.js" type="text/javascript"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-en.js"></script>
<%}%>
答案 9 :(得分:0)
获取locale
的两种最佳方法是使用动作继承的getLocale
动作支持到JSP:
<s:hidden name="locale"/>
或
<s:property value"%{locale}"/>
使用this method更改语言区域时。
不一样:
${pageContext.response.locale}