首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Play Framework / Twirl动态包含模板

Play Framework / Twirl动态包含模板
EN

Stack Overflow用户
提问于 2016-02-29 17:36:20
回答 1查看 1.1K关注 0票数 0

用例:我有一个在主机上处理所有请求的路由:端口/p路由如下所示:

代码语言:javascript
复制
GET     /p/*path    controllers.Application.p(path: String)

p方法获取一些数据并将其直接传递到视图p

代码语言:javascript
复制
return ok(p.render(currentSession));

在视图中,如果存在与传递的数据中的字符串匹配的模板,则需要导入模板。在这种情况下,字符串表示模型对象名,如"User“,如果有匹配的模板,则为views/custompages/User.scala.html。如果没有匹配的模板,我想使用一个通用模板,比如views/generic.scala.html

我的问题有两部分:

第1部分:我看到只需执行以下操作就可以检查模板的存在:

代码语言:javascript
复制
@if(custompages.User != null) {
    <p>it exists!</p>
}

但是,如果我将其更改为custompages.Usera (一个不存在的模板),就会得到一个编译错误(object Usera is not a member of package)。怎么能做这个检查?

第2部分:如何使用表示模型类的字符串进行检查?将其连接到第1部分答案中硬编码的“用户”的位置?

我是不是走错路了?我所做的是应该在控制器中使用反射查找匹配的模板,然后呈现适当的模板吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-29 20:20:26

我决定从控制器而不是视图来解决这个问题。这是我用来做的代码,以防其他人在这里寻找类似的答案。

注意: associatedEntity是如何确定要呈现哪个模板的,我调用类呈现,并将自己的会话对象作为参数传递,我使用以下方法来帮助创建答案:Play framework 2.1.3 function that will render scala template with given parameters

谢谢你的建议!

代码语言:javascript
复制
public Result p(String uri) {

    Session currentSession = getSession();

    final Class<?> clazz;
    try {
        clazz = Class.forName("com.domain.views.html." + currentSession.currentPage.associatedEntity.getSimpleName());

        //assumed you have a String parameter for your template
        java.lang.reflect.Method render = null;
        try {
            render = clazz.getDeclaredMethod("render", Session.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        play.twirl.api.Html html = null;
        try {
            html = (play.twirl.api.Html) render.invoke(null, currentSession);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return ok(html);
    } catch (ClassNotFoundException e) {
        return ok(p.render(currentSession));
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35705844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档