【问题标题】:Spring and Thymleaf春天和百里香叶
【发布时间】:2015-12-09 06:53:50
【问题描述】:

是否可以通过以下方式插入模型数据

例如 在 Spring 控制器中

ModelAndView mv = new ModelAndView(viewName);
String id = SessionUtil.getUserId(request);
boolean isUserLoggedIn = SessionUtil.isValidSession(request);    
mv.addObject("isUserLoggedIn", isUserLoggedIn);
**mv.addObject("id", id );**

在thymeleaf 视图模板中

   <ul class="nav nav-list" th:attr="ng-init='getNavigation(${id})'">

我希望得到 ...ng-init='getNavigation(1)'>

【问题讨论】:

    标签: spring model-view-controller thymeleaf


    【解决方案1】:

    Thymeleaf 没有按照您展示的方式进行字符串模板化,因此您需要将字符串与变量表达式连接起来:

    th:attr="ng-init='getNavigation('+${id}+')'"
    

    或用变量表达式括起来:

    th:attr="ng-init=${'getNavigation('+id+')'}"
    

    (两者都带有相同数量的字符,所以这纯粹是一个口味问题;我想,对我来说,第一个看起来更具可读性)

    【讨论】:

    • 感谢您对我的代码进行了一些修改。对于线 ....mv.addObject("id", id );我不得不切换到 mv.addObject("id", "\""+id +"\"" );如果没有这个修复,我在评估后得到一个未定义的值。我也在使用 AngularJS,这可能与它们的某些语法冲突吗?
    • 我建议在视图层中添加引号,例如th:attr="ng-init='getNavigation(\"'+${id}+'\")'"。有人可能会说,如果您使用 AngularJS,您根本不需要 thymeleaf,因为 AngularJS 可以做 Thymeleaf 可以做的所有事情,所以您可以坚持使用纯 HTML 而不是 Thymeleaf,但要回答您的问题 - 不,用法Angular 并没有改变 Thymeleaf 的语法,尽管很容易对这种混合可能需要的引号数量感到困惑。顺便说一句,如果您认为它令人满意,请接受我的回答:)。
    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多