V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vikeria
V2EX  ›  Java

spring-mvc 有没有这样一个轮子。

  •  
  •   vikeria · 2016-02-02 16:08:05 +08:00 · 4600 次点击
    这是一个创建于 3253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似 node 的 express-partials 模块一样,能够使某一个页面作为整体的 layout 。
    需求是不同的链接打开的页面都存在一个相同的导航。
    实际感觉的话,似乎要从模板解析或者是拦截起处入手。

    17 条回复    2016-02-04 16:36:44 +08:00
    cnhongwei
        1
    cnhongwei  
       2016-02-02 16:11:27 +08:00   ❤️ 1
    sitemesh tiles 之类的。和 spring mvc 没有太多的关系。
    landykingdom
        2
    landykingdom  
       2016-02-02 16:15:42 +08:00   ❤️ 1
    sitemesh
    vikeria
        3
    vikeria  
    OP
       2016-02-02 16:29:24 +08:00 via Android
    @cnhongwei
    @landykingdom
    thanks 一会去看下
    crazyxin1988
        4
    crazyxin1988  
       2016-02-02 16:33:58 +08:00
    没用过 express 你的意思是 模板框架吗?
    apache tiles 看看是否满足你的要求
    liuxey
        5
    liuxey  
       2016-02-02 16:40:13 +08:00
    只要是模板都有类似的功能, jsp 都行,这和 Spring-mvc 没有多大关系, Servlet 配合 JSP 也能把 layout 做的很好
    v2orz
        6
    v2orz  
       2016-02-02 16:40:35 +08:00 via iPhone
    velocity 或者 freemarker ,其实你这需求 jsp 都可以。。
    跟 springmvc 没啥关系
    vikeria
        7
    vikeria  
    OP
       2016-02-02 16:45:23 +08:00 via Android
    @liuxey
    @v2orz
    实际上的话是可以直接每个模板页面都引入同一个页面,只是觉得那样比较麻烦。希望省略掉这些,让每个页面代码对应功能看起来很纯粹。
    Sharuru
        8
    Sharuru  
       2016-02-02 16:49:36 +08:00
    = = 这不就是 iFrame 么
    caliven
        9
    caliven  
       2016-02-02 16:51:34 +08:00
    sitemesh
    vikeria
        10
    vikeria  
    OP
       2016-02-02 16:51:39 +08:00 via Android
    @Sharuru 不希望用 iframe. iframe 会带来一些蛋疼问题。现有实现就是用 iframe 实现的。
    caliven
        11
    caliven  
       2016-02-02 16:52:07 +08:00
    sitemesh 修饰框架
    zluyuer
        12
    zluyuer  
       2016-02-02 18:03:49 +08:00
    用 Freemarker 的 macro 可以实现,写一个大概的例子:

    主框架 base_layout.ftl :
    <#import 'nav.ftl' as nav>

    <html>
    <#macro doLayout>
    <@nav.doLayout />
    <#nested />
    </#macro>
    </html>


    导航页 nav.ftl (填充到 <@nav.doLayout />):
    <#macro doLayout>
    <nav>
    Navbar here
    </nav>
    </#macro>


    任意内容页(填充到 <#nested /> 部分):
    <#import 'base_layout.ftl' as layout>

    <div>
    <@layout.doLayout>
    Content here
    </@layout.doLayout>
    </div>
    zluyuer
        13
    zluyuer  
       2016-02-02 18:06:07 +08:00
    不好意思最后一页写错了,应该是:

    任意内容页(填充到 <#nested /> 部分):
    <#import 'base_layout.ftl' as layout>

    <@layout.doLayout>
    <div>
    Content here
    </div>
    </@layout.doLayout>;
    iEverX
        14
    iEverX  
       2016-02-02 20:31:55 +08:00
    jade4j , java 实现的 jade ,应该比较符合写 express 的习惯
    ddou
        15
    ddou  
       2016-02-02 20:44:02 +08:00
    再补充一个: handlebar
    hzwlf2002
        16
    hzwlf2002  
       2016-02-02 22:25:26 +08:00
    用过 apache tiles ,后来干脆转 angularjs + restful 写 single page application 了。
    ppwangs
        17
    ppwangs  
       2016-02-04 16:36:44 +08:00
    这功能我一般都自己实现的。
    现在主要使用 ajax/pjax 实现,体验更好一些。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:05 · PVG 03:05 · LAX 11:05 · JFK 14:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.