Thymeleaf #request和${param}对象的使用

参考资料

  1. Thymeleaf参考手册(二):标准表达式语法(一)


一. 前期准备

⏹配置文件

server:
  servlet:
    context-path: /jmw

⏹form

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Data
public class Test16Form {

    private String name;

    private String sex;

    private Date birthday;

    private BigDecimal money;

    private List<Test4Entity> tableList;
}

⏹进入页面的url

http://localhost:8080/jmw/test16/init?name=贾飞天&age=18

二. controller层

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/test16")
public class Test16Controller {
	
	// 注入request对象
    @Resource
    private HttpServletRequest request;

    @GetMapping("/init")
    public ModelAndView init() {

        // ⏹获取项目根路径
        String contextPath = request.getContextPath();
        System.out.println(contextPath);  // /jmw

        // ⏹将?key1=value1&key2=value2 转换为 map
        Map<String, String[]> parameterMap = request.getParameterMap();
        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
            System.out.println(entry.getKey());
            System.out.println(Arrays.toString(entry.getValue()));
        }
        /*
			name
			[贾飞天]
			age
			[18]
		*/

        // ⏹获取name参数所对应的value
        String name = request.getParameter("name");
        System.out.println(name);  // 贾飞天

        // 👉将map存入request的Attribute中
        HashMap<String, String> map1 = new HashMap<>();
        map1.put("address", "地球");
        map1.put("hobby", "睡觉");
        request.setAttribute("info", map1);

        // 👉将entity存入request的Attribute中
        Test16Form test16Form = new Test16Form();
        test16Form.setName("贾飞天");
        test16Form.setSex("男");
        request.setAttribute("entity", test16Form);

        // 返回到页面中
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("test16");
        return modelAndView;
    }
}

三. 前台HTML

⏹test16.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
	<!-- 只有当param对象不为空的时候,才执行渲染 --> 
    <th:block th:if="not ${param.isEmpty()}">
        <div>当前一共有[[${param.size()}]]个参数</div>
        <div>分别为: [[${param.name}]] 和 [[${param.age}]]</div>
    </th:block>
</div>
</body>
</html>

👉渲染之后

<div>当前一共有2个参数</div>
<div>分别为: 贾飞天 和 18</div>

四. 前台内联JS

🧐🧐🧐以下所有的JS代码必须包裹在<script th:inline="javascript"></script>内联标签中

4.1 #request.getParameterMap()

⏹获取url传参的所有参数

const paramMap = [[${#request.getParameterMap()}]];
console.log(paramMap);
/*
	{
	  "name": [
	    "贾飞天"
	  ],
	  "age": [
	    "18"
	  ]
	}
*/

4.2 #request.getParameter(key)

⏹获取指定的参数

const paramName = [[${#request.getParameter('name')}]];
console.log(paramName);  // 贾飞天

4.3 ${param}对象

⏹param是一个由Thymeleaf 提供的对象,用于存放url传参的所有参数
相当于#request.getParameterMap(),可以理解为简写形式

const param = [[${param}]];
console.log(param);
/*
	{
	  "name": [
	    "贾飞天"
	  ],
	  "age": [
	    "18"
	  ]
	}
*/
// 👉相当于 #request.getParameter('name')
const name = [[${param.name}]];
console.log(name);  // 贾飞天

// 👉由于没有hobby,所以渲染完之后为 null,又因为 ?? 表达式,所以最后结果为 吃饭
const hobby = [[${param.hobby}]] ?? '吃饭';
console.log(hobby);  // 吃饭

4.4 #request.getContextPath()

⏹获取设置的项目根路径

const contextPath1 = [[${#request.getContextPath()}]];
console.log(contextPath1);  // /jmw

// 👉#httpServletRequest和#request等效
const contextPath2 = [[${#httpServletRequest.getContextPath()}]];
console.log(contextPath2);  // /jmw

4.5 #request.getAttribute(key)

⏹获取请求时,设置的Attribute值

const info = [[${#request.getAttribute('info')}]];
console.log(info);
// {address: "地球", hobby: "睡觉"}

const entity = [[${#request.getAttribute('entity')}]];
console.log(entity);
// {name: "贾飞天", sex: "男", birthday: null, money: null, tableList: null}

五. 全局变量对象

😵之前的做法,需要将变量先存入页面的隐藏域中,然后使用js获取隐藏域的值

<input type="hidden" id="name" th:value="${name}"/>
<script th:inline="javascript">
	// 获取隐藏域中的值
	const name = document.getElementById("name").value;
	console.log(name);  // 贾飞天
</script>

🧐现在可以这么做,直接将后台的数据封装为一个全局参数对象

<script th:inline="javascript">
// 可以把js用到的所有的全局数据封装为一个对象
const globalParam = {
    name: [[${#request.getParameter('name')}]],
    info: [[${#request.getAttribute('info')}]],
    size: [[${param.size()}]],
    hobby: [[${param.hobby}]] ?? '吃饭',
};
console.log(globalParam);
/*
	{
	  "name": "贾飞天",
	  "info": {
	    "address": "地球",
	    "hobby": "睡觉"
	  },
	  "size": 2,
	  "hobby": "吃饭"
	}
*/
</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Thymeleaf模板引擎内置了一些对象,用于在模板中访问和操作数据。其中一些常用的内置对象包括: 1. `#ctx`:表示当前上下文,可以用于获取应用的上下文信息。 2. `#vars`:表示当前请求的HTTP参数,可以用于获取请求中的参数值。 3. `#locale`:表示当前的区域设置,可以用于国际化的处理。 4. `#request`:表示当前的HTTP请求对象,可以用于获取请求的相关信息。 5. `#response`:表示当前的HTTP响应对象,可以用于设置响应的相关信息。 6. `#session`:表示当前的HTTP会话对象,可以用于存储和获取会话的相关数据。 7. `#servletContext`:表示当前的Servlet上下文对象,可以用于获取Servlet容器的相关信息。 这些内置对象可以在Thymeleaf模板中使用表达式语法来访问和操作,例如通过`${#request.getParameter('paramName')}`来获取请求参数的值。同时,Thymeleaf还支持自定义的内置对象,可以通过在配置文件中进行配置来添加新的内置对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Thymeleaf模板引擎](https://blog.csdn.net/weixin_48426115/article/details/127801773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值