JFinal

登录 注册

关于Jfinal渲染的问题。

有一个页面上有3个div(也就这么3个div,其中一个div的id叫“first”),我想加载这个页面的时候,将另外一个页面中(first.html)的内容放入其中一个div中。用的是JQuery的方法。

$("#first").load("/page/first.html");

但是我这个first.html中有

 #(session.user.userName)
 这样jFinal模板引擎的代码。

放进去之后,在页面上没渲染出来,就把这个

“#(session.user.userName)”这端字直接显示出来了。

波神,有啥好方法,可以渲染出其中的值。

直说Jfinal的方法,不说JS的问题。

比如把那个first.html中的内容直接复制到div中,确实可以,但是我不能用。

我后续还有很多权限的判断需要用到这个问题的解决方法。

波神,求指导!

评论

  • 04-21 11:20
    问题描述得不是很清楚,我只能先猜一猜

    添加 me.add(new SessionInterceptor()) 了没有?
    注意 # 这个字符要是英文输入,不能是中文全角输入
  • 04-21 11:23
    @JFinal 没有用这个me.add(new SessionInterceptor())。我的问题是,#()里面的内容无法渲染出来,因为整个页面是用JS加载的div,div里面含有#()的东西,就当普通文字一样的渲染,并没有当指令渲染其中的内容。
  • 04-21 11:24
    @JFinal public void configInterceptor(Interceptors me) {
    me.add(new SessionInViewInterceptor());//session拦截器,用于在View模板中取出session值
    }
    这个我之前就加了的。
  • 04-21 11:29
    这样就好解决了,让 js 请求 action,假定你的这个 div 在一个名为 "div.html" 的文件之中,这样来用一下 controller 中的 renderToString:
    String ret = renderToString(...);
    renderHtml(ret);

    你还可以通过下面的代码在 controller 之外任意去用 Engine 对象:
    Template template = RenderManager.me().getEngine().getTemplate("div.htm
    String ret = template.renderToString(...);
  • 04-21 11:33
    @JFinal renderHtml(ret);这个ret怎么在页面中怎么获取呢?
  • 04-21 11:43
    @JFinal 就是一个html文件中含有#(session ....)这些东西,但是这个html文件不直接加载,而是放在另外一个html文件中的一个div中加载,就是$("#id").load("url");结果就是#(session ....)这些东西当成了文字加载,没有渲染出来。
  • 04-21 11:49
    @Ferrari8899 前面说得已经很清楚了,你先将这个 div 内容从 template 中过一遍,这样就生成了动态内容,生成的内容再发给客户端的 js:
    renderHtml(renderToString("div.html"));

    关键点在于,你要将 div 的内容先用模板引擎渲染一次,然后将渲染的结果响应给:
    $("#id").load("url");
  • 04-21 11:50
    @JFinal 哦,懂了,谢谢!我去试一下!
  • 04-21 11:51
    @Ferrari8899 记得搞定后回来分享一下
  • 04-21 11:52
    @JFinal 好的!
  • 发送