zoukankan      html  css  js  c++  java
  • 写点前端,vm + jquery + controller

    我要啰里八嗦一些东西了。以下陈述,基于这些事实:

    前端页面:.vm, velocity + jquery

    MVC:加强版的spring mvc

    Controller:@Controller, @RequestMapping,.htm, .json, GET, POST

    1).htm

    每一个.htm,在控制器里@Controller,意味着要写一个方法,该方法头部顶着@RequestMapping(value = "/topicEventcode.htm", method = RequestMethod.GET)。这样,页面刷新多次,都可以执行到该方法内。

    我之前遇到这样一个问题,写的不是GET,而是POST,导致页面刷新后,找不到控制器了,断点断在方法内怎么都进不来,呵呵,现在想来,这个太傻了。

    刷新/重新加载页面,那么你的这些内容都会被重新赋值渲染。这些值,就是从controller中带回来的,你可以放在ModelMap里带回来,也可以直接写入response带回。

    我一般使用modelMap,存些String类型的值,以前存储过复杂的对象,结果渲染不出来,是因为json序列化的时候,这个对象序列化失败。

    表1-1

                            #if($!mode == "topicStatistics") 
                                #foreach($line in $!data)
                                    <tr>
                                        <td>$!line.topic</td>
                                        <td>$!line.eventcode</td>   
                                        <td>$!line.fromApps</td> 
                                        <td>$!line.toApps</td> 
                                        <td>$!line.numPerDay</td> 
                                        <td>$!line.exProperty</td> 
                                        <td>$!line.statusEnum</td>
                                        <td>$!line.gmtCreate</td>     
                                        <td>$!line.gmtModified</td>       
                                        <td>$!line.operator</td>
                                        <td>
                                            <a href="#updateDataDiv" onclick="replaceFormTS('$!line.topic','$!line.eventcode','$!line.fromApps','$!line.toApps', '$!line.numPerDay','$!line.exProperty','$!line.statusEnum')" class="boxLink" >修改</a>
                                        </td>
                                    </tr>
                                #end    
                            #end

    2)controller,方法

    public String query(ModelMap modelMap, WebRequest request);  然后通过request.getParameter("mode")来获取.vm中

    public String query(ModelMap modelMap, String mode); 

    这两种方式都可以获取前端提交过来的页面元素的值。

    但在使用过程中,发现public String uploadFile(ModelMap modelMap, MultipartFile file); 这样使用,我上传的文件内容总是取不出来,需要这样转一下:

    写一个类,并用这个类做参数public String uploadFile(ModelMap modelMap, FileForm fileForm); 这样通过fileForm的get方法,就可以把文件内容取出来了。

    public class FileForm {

         private MultipartFile file;

         // ... getters and setters 

    }

    3).json

    写一个页面,还是比较费神的,所以我目前更倾向于使用json这种轻量级的方式了。

    .json可以做到,只提交页面上的部分内容到controller里,例如只提交其中一个form。但同时也意味着,整个页面不会重新刷新,值不会自动被重新加载。

    如果你确实又需要加载某些值,或只是向用户提示个什么,那么你需要使用ajax方式提交.json请求,并在ajax调用时,注入一个回调函数。

    这样,我们可以在modelMap/response里写入待更新的值/待提示给用户的值,并在回调函数里做相应处理就好。

       function postAddFormTM(){
            jQuery.post("insertRecordTM.json", 
                                {topic:$("input[name='aaa']").val(), eventcode:$("input[name='bbb']").val() }, 
                                function(result){
                                    alert(result.result.resultMsg);
                                }
            );
        }

    在使用过程中,我aaa的值为中文的时候,传到controller里后就变乱码了,那么就需要对这些中文框进行特殊编码,var aaaChinese = encodeURIComponent($("input[name='aaa']").val());

    在controller里,aaa= URLDecoder.decode(aaaChinese, "UTF-8");进行解码就可以正确取出中文了。

  • 相关阅读:
    字节对齐方法
    以太网帧、IP报文格式
    单光纤udp通信
    错误笔记(1)——关于克隆虚拟机引发的后续问题
    linux 查看目录名称的方法
    rpm方式安装MySQL-5.6
    克隆虚拟机后修改MAC地址
    安卓反编译一些记录
    mysql日志
    Linux文件监控工具——inotify-tools
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/3010686.html
Copyright © 2011-2022 走看看