在JSP中的会话变量中存储值并不适用于Google App Engine

时间:2016-11-26 11:49:59

标签: java jsp google-app-engine

所以我尝试在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;
&#13;
&#13;

TLDR - 我的问题是: 将变量存储在Google App Engine上的会话中是否存在已知问题,我是否应该使用其他Google API来解决此问题?

0 个答案:

没有答案