在使用@Html()加载的代码中播放2.0@routes.Assets.at

在使用@Html()加载的代码中播放2.0@routes.Assets.at,routes,playframework-2.0,eval,assets,Routes,Playframework 2.0,Eval,Assets,我正在填充一个模型(页面),其中一个字符串属性(内容)包含Scala模板代码: <img src="@routes.Assets.at("images/image.gif")" alt="alt text" /> 正如所料,@routes.Assets.at未解析为资产路径 Play 2.0中是否有eval()类型的实用程序函数用于此目的 或者,我可以从控制器中导出由资产路由表示的实际路径吗?然后,我将执行一个字符串替换 编辑-要提供更多上下文,请执行以下操作: 控制器代码: Ob

我正在填充一个模型(页面),其中一个字符串属性(内容)包含Scala模板代码:

<img src="@routes.Assets.at("images/image.gif")" alt="alt text" />
正如所料,@routes.Assets.at未解析为资产路径

  • Play 2.0中是否有eval()类型的实用程序函数用于此目的
  • 或者,我可以从控制器中导出由资产路由表示的实际路径吗?然后,我将执行一个字符串替换
  • 编辑-要提供更多上下文,请执行以下操作:

    控制器代码:

    ObjectMapper mapper = new ObjectMapper();
    Page page = new Page();
    // TODO: request().uri() mapping to json resource
    File x = Play.current().getFile("/content/index.json");
    try {
        page = mapper.readValue(x, Page.class);
    } catch (JsonParseException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        return notFound();
    }
    
    型号代码:

    public void setContent(String content) {
        // TODO: replace to resolve assets route
        this.content = StringEscapeUtils.unescapeHtml4(content);
    }
    
    感谢对该方法的任何解决方案或意见


    谢谢

    您应该意识到一件基本的事情:您根本不需要使用
    @routes.Assets.at()
    ,它只是一个助手,但没有特殊意义。因此,只需在代码中输入解析路径:

     <img src="/assets/images/image.gif" alt="alt text" />
    

    (当然,这是一个默认位置,如果有其他位置,请更改它)

    为什么不在传递到模板之前解析路由?根据第二点。我猜想这会发生在控制器内部。但是如何计算呢?在计算字符串的控制器代码中,可以将其作为XML文本执行:
    就是这样!谢谢实际上,我是在模型设定器上完成的,它似乎可以工作:this.content=StringEscapeUtils.unescapethml4(content.replaceAll(“#######资产##””,routes.ASSETS.at(““”.url());谢谢你们,我会接受你们的回答。是的,我可能不得不求助于那个。但是,如果有一个地方可以根据事物的精神来改变这种价值观,那就太好了:)啊,我的坏;当然,默认情况下,它是
    /assets/
    而不是
    /public/
    对不起,已修复。好的,但假设我只想在routes文件中设置/更改资产路径。i、 e.避免模型/控制器/其他地方的硬编码/重复路径。
     <img src="/assets/images/image.gif" alt="alt text" />
    
     <img src="###ASSETS_FOLDER###/images/image.gif" alt="alt text" />