所以我尝试在Google App Engine上构建Java Web应用程序。我开始的第一件事就是让我的JSP页面检测HttpRequest的Locale,从而以正确的语言显示页面,或者使用用户选择的语言并存储在会话变量中。
我发现了这个问题,BalusC的答案在我的项目(https://github.com/Leejjon/Blindpool)中运行得非常好,当时在Jetty上运行我的应用程序(使用' mvn jetty运行它:run-explosion&#39 ;): How to internationalize a Java web application?
但是,当我使用& mvn appengine:devserver'在本地应用引擎服务器上运行它时,它不会将语言存储在变量中。它也不适用于真正的应用引擎。
现在我没有看到App Engine日志记录中的任何错误,而且我似乎无法在App Engine中调试JSP页面,就像我在本地运行时一样(仅限.java文件)可以在app引擎上调试。)
根据文档,GAE将会话变量存储在memcache中,并将它们备份到数据存储中以进行扩展。如果它有效,那就好了,但它没有。
所以我可能会编写这段代码的Servlet版本,看看我是否可以调试它。
我当前的JSP代码:
<%@ page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%-- If the language is being passed in a parameter, use that language. --%>
<c:if test="${not empty param.language}">
<c:set var="language" value="${param.language}" scope="session" />
</c:if>
<%-- If the language variable isn't set at all, use the default locale from the request. --%>
<c:if test="${empty language}">
<c:set var="language" value="${pageContext.request.locale}" scope="session" />
</c:if>
<%-- Use the locale to set up the bundle. --%>
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="net.leejjon.blindpool.i18n.messages" />
<!DOCTYPE html>
<html lang="${language}">
<head>
<title><fmt:message key="title" /></title>
</head>
<body>
<form>
<label><fmt:message key="language" /></label>
<select id="language" name="language" onchange="submit()">
<option value="en" ${language == 'en' ? 'selected' : ''}>English</option>
<option value="nl" ${language == 'nl' ? 'selected' : ''}>Nederlands</option>
</select>
</form>
</body>
</html>
&#13;
TLDR - 我的问题是: 将变量存储在Google App Engine上的会话中是否存在已知问题,我是否应该使用其他Google API来解决此问题?