如何从Wicket提供动态JavaScript文件?

Tom*_*Tom 6 javascript java wicket

我正在Wicket建立一个网站.我需要提供一个JavaScript文件,xyz.js供其他人/网站直接阅读 - 也就是说,不要包含在我的一个HTML页面中.

xyz.js需要一些基于path_info请求期间提供给它的动态内容,因此它需要是一个可以插入的模板.

有没有办法让我使用Wicket构建和提供这个JS文件?

如果没有,什么是最好的替代解决方案?一个JSP文件?

Nee*_*aks 5

编辑:在我最初的回答中,我忽略了从公共URL提供此JavaScript文件的要求.在研究方法的同时,我意识到我的整个方法都存在缺陷.所以,我将原来的答案移到最后,并提供一个更加重要的答案.

要在公共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");
Run Code Online (Sandbox Code Playgroud)

免责声明:此代码不是在IDE中编写的,也从未运行过.因此,它甚至可能无法编译.尽管如此,它应该足以说明实现这一目标的方式.

此答案基于" 动态生成CSS样式表 "和" Wicket动态图像URL ",请参阅这些来源以获取更多详细信息.

原始答案(如果您想将JavaScript或CSS作为外部引用文件添加到Wicket页面,但不能公开显示),则非常有用:

查看Wicket wiki中的" 动态生成CSS样式表 "页面和JIRA中的WICKET-2890问题.从Wicket 1.4.10开始,TextTemplateResourceReference类现在是Wicket核心的一部分,因此您不再需要复制粘贴它.

维基页面提到了CSS页面,但JavaScript或任何其他非标记文本内容的方法是相同的.