1

我必须在 javascript 响应处理程序函数中处理 JSTL 标记 (fmt:)。例如:

  1. 我需要通过 AJAX 切换语言,所以我需要通过 javascript 更新我的工具面板,并在响应处理程序函数 (javascript) 中继续 fmt:setLocale
  2. 我必须通过 ajax 更新我的选择下拉菜单,它们必须翻译适当的本地化,所以我必须在 javascript 中使用 fmt:message

但是,jsp 引擎不会处理 .js 文件,并且我的代码不起作用:

document.findElementById("div1").innerHTML = "<fmt:message key="word_from_DB"/>";
document.findElementById("div2").innerHTML = "<fmt:setLocale value="en"/>";

问题:如何从 javascript 处理这些标签,或者我应该在哪里搜索替代标签?

4

1 回答 1

0

您如何准确地实现您想要的取决于您的 JSP 和 JS 文件的内容,但这是一种潜在的解决方案:

JS:

function setDivInnerHTML(html1, html2) {
    document.findElementById("div1").innerHTML = html1;
    document.findElementById("div2").innerHTML = html2;
}

JSP:

...
<script>
setDivInnerHTML("<fmt:message key="word_from_DB"/>", "<fmt:setLocale value="en"/>");
</script>
...

根据评论编辑:

JSP (URL = "/cities"):

String country = request.getParameter("country");
String locale = request.getParameter("locale");
List<City> cities = getCitiesFromDB(country, locale);
out.println(objectToJSON(cities));

JS(使用 jQuery):

function createOption(val, html) {
    return $("<option></option>").html(html).val(val);
}

function populateCities(cities) {
    var $select = $("#city_select");
    $select.empty();
    for (var i = 0; i < cities.length; i++) {
        var $opt = createOption(cities[i].name, cities[i].name);
        $select.append($opt);
    }
}

function getCities(country, locale) {
    var url = "/cities";
    return $.ajax(url, {
        data: {
            country: country,
            locale: locale
        }
    });
}

// call this to load the initial cities
// and do the same thing when a new country or locale is selected
getCities(country, locale).then(populateCities);
于 2013-04-07T21:13:25.040 回答