Как я могу обслуживать динамический файл JavaScript из Wicket? - PullRequest
6 голосов
/ 30 октября 2010

Я строю сайт в калитке. Мне нужно предоставить файл JavaScript, xyz.js, для других людей / веб-сайтов, чтобы он мог читать напрямую, то есть не быть включенным в одну из моих HTML-страниц.

xyz.js требуется некоторое динамическое содержимое на основе path_info, которое предоставляется ему во время запроса, поэтому это должен быть шаблон, который можно интерполировать.

Можно ли как-нибудь собрать и обработать этот JS-файл с помощью Wicket?

Если нет, то какое лучшее альтернативное решение? Файл JSP?

1 Ответ

5 голосов
/ 30 октября 2010

РЕДАКТИРОВАТЬ : В своем первоначальном ответе я упустил требование сделать этот файл JavaScript доступным из общедоступного URL.В поисках пути к этому я понял, что весь мой подход был ошибочным.Итак, я перенесу свой исходный ответ в конец и предоставлю более подробный ответ здесь.

Чтобы опубликовать текстовый ресурс на общедоступном URL (JavaScript или CSS), вам необходимоотредактируйте ваш метод init() в WicketApplication, добавив:

String resourceKey = "DYN_RES_KEY";
//load your text template
final TextTemplate textTemplate = new PackagedTextTemplate(MyPage.class, "script.js", "text/javascript", "UTF-8");
//add the resource
getSharedResources().add(resourceKey, new Resource() {
    @Override
    public IResourceStream getResourceStream() {
        String queryParam = getParameters().getString("paramName");
        //...do whatever you need with the parameters...
        Map<String,Object> vars = new HashMap<String,Object>();
        vars.put("param", queryParam);
        String stringValue = textTemplate.asString(vars);
        return new StringResourceStream(stringValue, textTemplate.getContentType());
    }
});
//mount the resource at some public URL
mountSharedResource("/resource", Application.class.getName() + "/" + resourceKey);
//make alias, optional
getSharedResources().putClassAlias(MyPage.class, "scripts");

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот код не написан в IDE и никогда не запускался.Как таковой, он может даже не скомпилироваться.Тем не менее, этого должно быть достаточно, чтобы проиллюстрировать, как это может быть достигнуто.

Этот ответ основан на " Динамически генерировать таблицу стилей CSS " и " URL динамического изображения Wicket", см. эти источники для получения более подробной информации.

ОРИГИНАЛЬНЫЙ ОТВЕТ (полезно, если вы хотите добавить JavaScript или CSS в качестве внешнего файла на страницу Wicket, но не сделать его публично видимым):

Проверьте " динамически генерировать страницу стилей CSS " на вики-сайте Wicket и WICKET-2890 в JIRA.Начиная с Wicket 1.4.10, класс TextTemplateResourceReference теперь является частью ядра Wicket, поэтому вам больше не нужно копировать и вставлять его.

На странице вики упоминается страница CSS, но подходто же самое для JavaScript или любого другого содержимого без разметки.

...