spring boot 與 thymeleaf (4): 基本對象、工具類對象


如果在前台, 我需要獲取session中的信息, 或者需要獲取url中的參數信息, 是不是需要在后台手動處理好, 然后放到Model中去, 在前台通過${}來取呢?

當然, 這種方式, 是可以的, 但是比較麻煩, 而且, 別人已經考慮到這個了, 我們直接用就可以了.

一. 基本對象

#ctx 上下文對象
#vars 上下文對象(和#ctx相同, 但是一般用#ctx)
#locale 上下文區域設置
#request (僅在Web Contexts中) HttpServletRequest對象
#response (僅在Web Contexts中) HttpServletResponse對象
#session (僅在Web Contexts中) HttpSession對象
#servletContext (僅在Web Contexts中) ServletContext對象

 

1. 數據准備

package org.elvin.learn.springboot.controller;

import org.elvin.learn.springboot.pojo.Book;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.MapUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.*;

@Controller
@RequestMapping("thy")
public class ThyController {

    @Autowired
    private HttpServletResponse response;

    @Autowired
    private HttpServletRequest request;

    @GetMapping("index")
    public String index(Model model) {

        Book book = new Book("springmvc", new DateTime().toString("yyyy-MM-dd"), 10000L);
        model.addAttribute("book", book);

        HttpSession session = request.getSession();
        session.setAttribute("session1", "lalala");

        return "thy/index";
    }
}

 

2. request / param

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">reqeust</h3>
    </div>
    <div class="panel-body">
        <p th:text="${#request.getContextPath()}"></p>
        <div th:each="item : ${#request.getParameterNames()}">
            <p th:text="|name : ${item}, value : ${#request.getParameter(item)}|"></p>
        </div>
        <hr />

        <p th:text="|size : ${param.size()}, lang: ${param.lang}, arr: ${param.arr}, arr-first: ${param.arr[1]}|"></p>
    </div>
</div>

#request -> HttpServletRequest 對象. 

param : 用來獲取請求參數的.  

param可以通過直接點的方式, 來訪問參數. 是非常方便的

除了size()方法, 還有 isEmpty() , containsKey('...')兩個常用方法

 

2. session 

html:

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">session</h3>
    </div>
    <div class="panel-body">
        <p th:text="${#session.getAttribute('session1')}"></p>
        <p th:text="|size : ${session.size()} , value : ${session.session1} |"></p>

        <div th:each="item : ${#session.getAttributeNames()}">
            <p th:text="|name : ${item}, value : ${#session.getAttribute(item)}|"></p>
        </div>
    </div>
</div>

結果:

#session -> HttpSession對象

session和param一樣, 都可以通過點的方式來獲取session, 除了size()方法, 還有 isEmpty() , containsKey('...')兩個常用方法

 

3. 上下文對象 #ctx

ctx主要看 IContext 接口. 

package org.thymeleaf.context;

import java.util.Locale;
import java.util.Set;

public interface IContext {
    Locale getLocale();

    boolean containsVariable(String var1);

    Set<String> getVariableNames();

    Object getVariable(String var1);
}

在后台寫入Model的內容, 在前台都可以通過#ctx來獲取

 

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">上下文對象</h3>
    </div>
    <div class="panel-body">

        <p th:text="${#ctx.getVariable('book').name}"></p>

    </div>
</div>

 

 

在后台傳入一個集合或者一個字符串, 在前台使用時, 如果不知道集合,字符串是否為空, 是不是會導致一些問題呢?

那如果會導致問題, 那么在前台是否有方法來解決這些問題呢?

這里需要借助一些工具類, 來輔助判斷.

二. 工具類對象

#execInfo 有關正在處理的模板的信息
#messages 用於在變量表達式中獲取外部化消息的方法, 與使用#{...}語法獲得的方式相同
#uris 轉義 URL / URI 部分的方法
#conversions 執行配置的轉換服務(如果有的話)的方法
#dates java.util.Date對象的方法: 格式化, 組件提取等
#calendars java.util.Calendar對象, 類似於#dates
#numbers 用於格式化數字對象的方法
#strings String對象的方法: contains, startsWith, prepending, appending等
#objects 一般對象的方法
#bools 布爾評估的方法
#arrays 數組的方法
#lists 列表的方法
#sets 集合的方法
#maps map方法
#aggregates 在數組或集合上創建聚合的方法
#ids 處理可能重復的id屬性的方法

具體的使用方法, 可以通過 ctrl + 鼠標左鍵點擊  的方式, 進類里面查看. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM