Jfinal中能否render视图到一个变量中?
@JFinal 你好,想跟你请教个问题:
有这样一种情况,在PHP框架ThinkPHP中,关于视图呈现有这样一种用法:
$html = $this->fetch("模板1");
$this->assign("html",$html);
$this->display("模板2");
这里将模板1解析后,赋值到$html,然后将 $html 作为视图的参数,在模板2中,以变量的形式输出。
不知道在Jfinal极速框架中有什么方式可以实现类似的用法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
用模板解决的问题,和Jfinal么关系
我这里的用法是将渲染结果传递给页面中作为JS变量,以便于在JS中动态操作html模板。手动构造html模板太痛苦了,而且变化极大,不便于维护,所以直接将模板写在文件中,后台渲染后,传递给JS变量。不知道有什么更优的方式来完成这种应用。
我这里的用法是将渲染结果传递给页面中作为JS变量,以便于在JS中动态操作html模板。手动构造html模板太痛苦了,而且变化极大,不便于维护,所以直接将模板写在文件中,后台渲染后,传递给JS变量。
回复
没让你手动构造什么HTML啊,模板引擎写好HTML,用变量占位不就好了,然后渲染不就得了。。。渲染后的结果作为一个变量,再传给其他模板不就好了。。。听不懂你说什么。。。这些本来就是模板引擎都支持的啊
回复
模板中是有可能会使用后台controller传递过来的数据的,所以只用模板就不行了。上一条回复中已经提供代码实现该用法了。
回复
那你用啊。。。模板里本来就能使用变量。。。真不明白你纠结什么
回复
都没明白问题中是什么意思,你回答什么?可以不用回了。我提出的问题JFinal已经做了专业的解答,并且已经做了完成,我也贴出了代码以供参考。回复你的评论完全就是礼貌性的技术探讨了。你自己回头去看看你给别人的回复,有一个是认真帮助别人或真诚的技术讨论的吗?对新手各种打击,各种喷。
这种方式,模板引擎中很常用啊,比如将渲染结果作为报表或邮件来发送。
我用的beetl模板引擎是很方便的
按照自定义Render的方式,已经完成该用法。解决了不能同时Render多个视图的问题。提供出来供参考。
控制器中使用方式(并不影响主视图的呈现):
多个模板的话, 你应该按照波总的回复,实现Render接口,在这个接口render方法显示,你自己调用多个freemarker模板
回复
@iehyou : 我这里的FreeMarkerToVarRender类的中render方法中将模板解析输出到了变量中的,现在的问题是一个contoller中只能使用一个render。控制器中调用render(),实际上并没有执行到FreeMarkerToVarRender中的render()方法。
引用来自“JFinal”的评论
只需要通过继承 Render 或者某个具体的 Render,例如 FreemarkerRender,然后在其 render() 方法中,将输出的 Writer 换成你自己的 new StringWriter(),这样就可以将内容输出到 StringWriter 对象中去了。
使用自定义的 render 这样用:
按照您的方法试过了,但是一个controller只能render一个模板啊,就是以最后的一个为准。我这里想要的用法是,将1-N个模板,输出到变量,这N个变量作为参数传递给主模板,由主模板在适当的位置输出。怎么能够同时使用多个render呢?
只需要通过继承 Render 或者某个具体的 Render,例如 FreemarkerRender,然后在其 render() 方法中,将输出的 Writer 换成你自己的 new StringWriter(),这样就可以将内容输出到 StringWriter 对象中去了。
使用自定义的 render 这样用: