JSP

<script type="text/javascript">
        $(function(){
            $("#modelTest").on("click",function(){

                window.location.href="<%=basePath%>model/modelTest.do";
            })
        });
  </script>
  <body>

    <input type="button" id="modelTest" value="测试">


  </body>

EL表达式在页面接收返回值

<script type="text/javascript">
        $(function(){
            $("#modelTest").on("click",function(){

                window.location.href="<%=basePath%>model/modelTest.do";
            })
        });
  </script>
  <body>

    <input type="button" id="modelTest" value="测试">

    <input type="text" value="${pojo.userName }">
    <input type="text" value="${pojo.sex }">

  </body>

@Controller
@RequestMapping(value=“model”)

public class ModelAttributeTest {

    @ModelAttribute
    public void init(Model mode)
    {
        PojoTest pojo=new PojoTest(null, "小明", "男");
        mode.addAttribute("pojo", pojo);
    }

    @RequestMapping(value="modelTest.do")
    public String modelTest()
    {
        return "modelTest";
    }

}

从执行结果看出,当访问请求时,会首先访问init方法,然后再对test方法进行访问,并且是同一个请求,因为model模型数据的作用域与request相同,所以可以用此标记直接标记在方法上对实际要访问的方法进行一些初始化操作

@ModelAttribute标记方法有返回值

@Controller
@RequestMapping(value="model")
public class ModelAttributeTest {

    @ModelAttribute
    public String init(Model mode)
    {
        System.out.println("进入init方法");
        PojoTest pojo=new PojoTest(null, "小明", "男");
        mode.addAttribute("pojo", pojo);
        return "model/befor.do";
    }

    @RequestMapping(value="befor.do")
    public String befor(){

        System.out.println("进入befor方法");
        return "index";

    }

    @RequestMapping(value="modelTest.do")
    public String modelTest()
    {
        System.out.println("进入modelTest方法");
        return "modelTest";
    }

}

这里稍微做了点变形,可以看到在被@ModelAttribute方法中设值了返回路径为befor方法,但是在在代码运行的过程中并不会跳转befor方法,而是在代码执行完成return之前直接跳转了实际请求的方法。

当@RequestMapping标记和@ModelAttribute同时标记在一个方法上

@Controller
@RequestMapping(value="model")
public class ModelAttributeTest {

    @RequestMapping(value="modelTest.do")
    @ModelAttribute(value="pojo")
    public String modelTest()
    {
        System.out.println("进入modelTest方法");

        return "modelTest";
    }

}

点击测试页面发现进入控制器后返回,页面报404,这是因为当两个注解标记到同一个方法上时,逻辑视图名并不是返回值,而是返回请求的路径,根据model/modelTest.do生成逻辑视图。在这里我们修改下代码,把controller上的@RequestMapping标记去掉,并修改下页面的请求路径,让生成的视图路径和访问的页面路径相同

@Controller
public class ModelAttributeTest {

    @RequestMapping(value="modelTest.do")
    @ModelAttribute(value="pojo")
    public String modelTest()
    {
        System.out.println("进入modelTest方法");

        return "modelTest";
    }

}





<script type="text/javascript">
        $(function(){
            $("#modelTest").on("click",function(){

                window.location.href="<%=basePath%>modelTest.do";
            })
        });
  </script>
  <body>

    <input type="button" id="modelTest" value="测试">

    <input type="text" value="${pojo }">

  </body>

点击测试页面,会发现当两个注解同时注解到一个方法上时,方法的返回值会变成model模型的返回值,key是标记的名

@ModelAttribute标记在参数前

从from表单或url地址中取值,这里就以url地址为例,为了避免url地址中文乱码问题,这里调用了encodeURL函数

<script type="text/javascript">
        $(function(){
            $("#modelTest").on("click",function(){

                window.location.href="<%=basePath%>model/modelTest.do?userName="+encodeURI('小明')+"&sex="+encodeURI('男');
            })
        });
  </script>
  <body>

    <input type="button" id="modelTest" value="测试">
    <input type="text" value="${pojo.userName }">
    <input type="text" value="${pojo.sex }">

  </body>


@Controller
@RequestMapping(value="model")
public class ModelAttributeTest {

    @RequestMapping(value="modelTest.do")
    public String modelTest(@ModelAttribute("pojo") PojoTest pojo) 
    {
        try {
            pojo.setUserName(new String(pojo.getUserName().getBytes("iso-8859-1"),"utf-8"));
            pojo.setSex(new String(pojo.getSex().getBytes("iso-8859-1"),"utf-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(pojo);
        return "modelTest";
    }

}

点击页面测试,页面文本框会显示URL地址传递过来的参数,因为SpringMVC会自动匹匹配页面传递过来的参数的name属性和后台控制器中的方法中的参数名,如果参数名相同,会自动匹配,如果控制器中方法是封装的bean,会自动匹配bean中的属性,其实这种取值方式不需要用@ModelAttribute注解,只要满足匹配要求,也能拿得到值

从model对象中取值

@Controller
@RequestMapping(value="model")
public class ModelAttributeTest {

    @ModelAttribute("pojo")
    public PojoTest init( PojoTest pojo)
    {
        pojo.setSex("男");
        return pojo;

    }

    @RequestMapping(value="modelTest.do")
    public String modelTest(@ModelAttribute("pojo") PojoTest pojo) 
    {
        pojo.setUserName("小明");
        return "modelTest";
        }

点击测试发现,modelTest拿到inint方法中的pojo对象,合并两次set的参数后返回页面

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值