Spring MVC and Thymeleaf: how to access data from templates

在典型的Spring MVC应用中,@Controller修饰的类负责model map中数据的准备和指定跳转到的view。在Thymeleaf中,上述这些内容被转化为Thymeleaf的上下文对象,使得所有在上下文中定义的变量,在templates模板表达式中可用。

1.Spring模型属性(Spring model attributes)

添加属性到Model

@RequestMapping(value = "message", method = RequestMethod.GET)
    public String messages(Model model) {
        model.addAttribute("messages", messageRepository.findAll());
        return "message/list";
    }

返回ModelAndView

@RequestMapping(value = "message", method = RequestMethod.GET)
    public ModelAndView messages() {
        ModelAndView mav = new ModelAndView("message/list");
        mav.addObject("messages", messageRepository.findAll());
        return mav;
    }

在使用了Thymeleaf的view中,就可以获取到model中的值,进行相关操作了

<tr th:each="message : ${messages}">
        <td th:text="${message.id}">1</td>
        <td><a href="#" th:text="${message.title}">Title ...</a></td>
        <td th:text="${message.text}">Text ...</td>
    </tr>

2.请求参数(Request parameters)

假设在@Controller所修饰的类中,发送一个重定向请求,该请求带有参数

@Controller
    public class SomeController {
        @RequestMapping("/")
        public String redirect() {
            return "redirect:/query?q=Thymeleaf+Is+Great!";
        }
    }

为了接收这个参数,可以使用param.作为前缀

<p th:text="${param.q}">Test</p>

如果参数被赋值为数组或集合,则使用${param.q}获得的是序列化后的数组或集合

<p th:text="${param.q[0] + ' ' + param.q[1]}" th:unless="${param.q == null}">Test</p>

另一种获取请求参数的方式是通过#request,它相当于直接接入的是javax.servlet.http.HttpServletRequest

<p th:text="${#request.getParameter('q')}" th:unless="${#request.getParameter('q') == null}">Test</p>

 

3.会话属性(Session attributes)

如下,向session中添加属性

@RequestMapping({"/"})
    String index(HttpSession session) {
        session.setAttribute("mySessionAttribute", "someValue");
        return "index";
    }

在页面中session会话中属性的获取,可以通过添加session.作为前缀

<p th:text="${session.mySessionAttribute}" th:unless="${session == null}">[...]</p>

另一种获取会话中参数的方式是通过#session,相当于直接接入javax.servlet.http.HttpSession

${#session.getAttribute('mySessionAttribute')}

 

4.Servlet上下文属性(ServletContext attributes)

servlet上下文属性在requst、session中是共享的,如果在使用了Thymeleaf的页面中需要使用servlet上下文属性时,需要使用#servletContext.作为前缀

<table>
            <tr>
                <td>My context attribute</td>
                <!-- Retrieves the ServletContext attribute 'myContextAttribute' -->
                <td th:text="${#servletContext.getAttribute('myContextAttribute')}">42</td>
            </tr>
            <tr th:each="attr : ${#servletContext.getAttributeNames()}">
                <td th:text="${attr}">javax.servlet.context.tempdir</td>
                <td th:text="${#servletContext.getAttribute(attr)}">/tmp</td>
            </tr>
        </table>

 

5.Spring实体对象(Spring beans)

Thymeleaf允许接入注册在Spring应用上下文中的beans(Spring Application Context),使用@beanName

<div th:text="${@urlService.getApplicationUrl()}">...</div> 

@urlService注册的spring bean 如下

@Configuration
    public class MyConfiguration {
        @Bean(name = "urlService")
        public UrlService urlService() {
            return () -> "domain.com/myapp";
        }
    }

    public interface UrlService {
        String getApplicationUrl();
    }

 

                                           参考链接:https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html

 

 

在当今计算机视觉领域,深度学习模型在图像分割任务中发挥着关键作用,其中 UNet 是一种在医学影像分析、遥感图像处理等领域广泛应用的经典架构。然而,面对复杂结构和多尺度特征的图像,UNet 的性能存在局限性。因此,Nested UNet(也称 UNet++)应运而生,它通过改进 UNet 的结构,增强了特征融合能力,提升了复杂图像的分割效果。 UNet 是 Ronneberger 等人在 2015 年提出的一种卷积神经网络,主要用于生物医学图像分割。它采用对称的编码器 - 解码器结构,编码器负责提取图像特征,解码器则将特征映射回原始空间,生成像素级预测结果。其跳跃连接设计能够有效传递低层次的细节信息,从而提高分割精度。 尽管 UNet 在许多场景中表现出色,但在处理复杂结构和多尺度特征的图像时,性能会有所下降。Nested UNet 通过引入更深层次的特征融合来解决这一问题。它在不同尺度上建立了密集的连接路径,增强了特征的传递与融合。这种“嵌套”结构不仅保持了较高分辨率,还增加了特征学习的深度,使模型能够更好地捕获不同层次的特征,从而显著提升了复杂结构的分割效果。 模型结构:在 PyTorch 中,可以使用 nn.Module 构建 Nested UNet 的网络结构。编码器部分包含多个卷积层和池化层,并通过跳跃连接传递信息;解码器部分则包含上采样层和卷积层,并与编码器的跳跃连接融合。每个阶段的连接路径需要精心设计,以确保不同尺度信息的有效融合。 编码器 - 解码器连接:Nested UNet 的核心在于多层次的连接。通过在解码器中引入“skip connection blocks”,将编码器的输出与解码器的输入相结合,形成一个密集的连接网络,从而实现特征的深度融合。 训练与优化:训练 Nested UNet 时,需要选择合适的损失函数和优化器。对于图像分割任务,常用的损失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值