Play Framework 2.0中的主题支持

时间:2013-08-25 13:37:23

标签: java playframework playframework-2.0

如何在Play Framework 2中实现主题支持? 我想创建目录结构,如:         views / default< - 默认模板目录
        views / site1< - 网站1的模板         views / site2< - 网站2的模板

如果模板不存在(即views / site1 / home),它应该从默认目录渲染模板。

我已尝试cls = Class.forName("views.html.home);但我得到未找到课程例外。

解: 也许有人会觉得这很有用:

protected static String renderTemplate(final String template, final String action,final ViewData templateParams) {
    Class<?> cls = null;
    String ret = "Template not found";
    try {
        cls = Class.forName(template);
    } catch (ClassNotFoundException e) {
        ret = e.toString();
    }

    if (cls == null) {
        try {
            cls = Class.forName("views.html.default."+action);
        } catch (ClassNotFoundException e) {
            ret = e.toString();
        }
    }
    if (cls != null) {
        Method htmlRender;
        try {
            htmlRender = cls.getMethod("render", ViewData.class);
            ret = htmlRender.invoke("",templateParams).toString();

        } catch (NoSuchMethodException e) {
            ret = "Method not found"+e.toString();
        } catch (IllegalAccessException e) {
            ret = "illegal access exception";
        } catch (InvocationTargetException e) {
            ret = "InvocationTargetException";
        }
    }
    return ret;
}

ViewData vd=new ViewData();
renderTemplate("views.html.custom."+viewname, actionname, vd)

protected static String renderTemplate(final String template, final String action,final ViewData templateParams) { Class<?> cls = null; String ret = "Template not found"; try { cls = Class.forName(template); } catch (ClassNotFoundException e) { ret = e.toString(); } if (cls == null) { try { cls = Class.forName("views.html.default."+action); } catch (ClassNotFoundException e) { ret = e.toString(); } } if (cls != null) { Method htmlRender; try { htmlRender = cls.getMethod("render", ViewData.class); ret = htmlRender.invoke("",templateParams).toString(); } catch (NoSuchMethodException e) { ret = "Method not found"+e.toString(); } catch (IllegalAccessException e) { ret = "illegal access exception"; } catch (InvocationTargetException e) { ret = "InvocationTargetException"; } } return ret; } ViewData vd=new ViewData(); renderTemplate("views.html.custom."+viewname, actionname, vd)

2 个答案:

答案 0 :(得分:1)

你必须自己实现它,作为参考,检查Play Authenticate usage sample,它允许发送ie。验证电子邮件基于Play的模板并取决于客户端的语言,因此对于一个实例,如果您的主要语言是波兰语,它将呈现verify_email_pl.scala.html,否则如果您的浏览器使用PA不支持的语言,它将默默回退到: verify_email_en.scala.html

检查方法的usagedeclaration

对于您的情况,这将是一个很好的解决方案,当然只是选择的标准会有所不同。

答案 1 :(得分:-1)

此过程称为“品牌”。你要做的就是跟随。 在db中按名称“BRANDING”创建一个表,并在其中为每个网站实例添加主题名称。 现在你将按照你提到的那样创建文件夹层次结构,并在jsp页面中加载css文件,你将这样做<link rel="stylesheet" type="text/css" href="/views/${themeName}.css">

其中themeName将是一个服务器端变量,您将在控制器中编程以从db中获取,或者第一次获取它然后缓存它。