05-springmvc之ssm四(学生转班业务)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhaoliangyan/article/details/88808583

* 业务需求:转班

    * 修改数据库学生表,添加进班时间

 

  * 添加需要:转班需要更新学生进班时间

 

@Controller
public class TransferController {
    @Autowired
    private TransferService mTransferService;
    @RequestMapping("/toTransfer")
    public String toTransfer(Model model){
        model.addAttribute("tab","transfer");
        return "tab";
    }


    @RequestMapping("/transfer")
    @ResponseBody
    public BaseDataVo transfer(@RequestBody TransferDataVo dataVo){
        System.out.println(dataVo);
        return mTransferService.transfer(dataVo);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>学生转班管理</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css">
    <script src="${pageContext.request.contextPath}/jquery/jquery-3.3.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        function doTransfer() {
            var sid = $("#sid").val();
            var oldCno = $("#oldCno").val();
            var newCno = $("#newCno").val();
            var date = $("#date").val();
            var sendData = {"sid": sid, "oldCno": oldCno, "newCno": newCno, "date": date};
            var jsonData=JSON.stringify(sendData);
            $.ajax({
                    url: "${pageContext.request.contextPath}/transfer.do",
                    type: "POST",
                    contentType:"application/json;charset=utf-8",
                    dataType: "json",
                    data:jsonData,
                    processData:false,//默认是true,是否转换为查询字符串
                    success: function (data, status) {
                        var content = JSON.parse(JSON.stringify(data));
                        // 好看提示框
                        if(content.code==200) {
                            alert(content.tip);
                            $("#sid").val("");
                            $("#oldCno").val("");
                            $("#newCno").val("");
                            $("#date").val("");
                        }else {
                            alert("请求转班失败");
                        }
                        $("#sid").val("");
                        $("#oldCno").val("");
                        $("#newCno").val("");
                        $("#date").val("");
                    },
                    error:function () {
                        alert("请求失败...");
                    }
                }
            );
        }
    </script>
</head>
<body>

<form class="form-horizontal" role="form" action="${pageContext.request.contextPath}/login.do" method="post">
    <div class="form-group">
        <label class="col-sm-6 control-label">原班级号</label>
        <div class="col-sm-3">
            <input type="text" class="form-control" id="oldCno" name="oldCno"
                   placeholder="请输入原班级号">
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-6 control-label">学生学号</label>
        <div class="col-sm-3">
            <input type="text" class="form-control" id="sid" name="sid"
                   placeholder="请输入学生学号">
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-6 control-label">新班级号</label>
        <div class="col-sm-3">
            <input type="text" class="form-control" id="newCno" name="newCno"
                   placeholder="请输入新班级号">
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-6 control-label">转班日期</label>
        <div class="col-sm-3">
            <input type="date" class="form-control" id="date" name="date"
                   placeholder="请输入新班级号">
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="button" class="btn btn-primary" onclick="doTransfer()">提交</button>
        </div>
    </div>
</form>

</body>
</html>

* 学生列表展示

 *dao
  List<Student> queryAllStudents();
  <select id="queryAllStudents" parameterType="int" resultType="Student">
        SELECT sid,cno,sname,ssex,sage,colleage,classhour FROM student
    </select>

* service
public interface StudentService {
    BaseDataVo getAllStudents();
}
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
   private StudentMapper mStudentMapper;
    @Override
    public BaseDataVo getAllStudents() {
        StudentDataOutVo dataOutVo=new StudentDataOutVo();
        List<Student> students = mStudentMapper.queryAllStudents();
        dataOutVo.setStudents(students);
        return dataOutVo;
    }
}

@Controller
public class StudentController {
    @Autowired
    private StudentService mStudentService;
    @RequestMapping("/toStudents")
    public String toStudents(Model model){
        model.addAttribute("tab","students");
        return "tab";
    }
    @RequestMapping("/students")
    @ResponseBody
    public BaseDataVo students(){
        return mStudentService.getAllStudents();
    }


}

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>学生转班管理</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css">
    <script src="${pageContext.request.contextPath}/jquery/jquery-3.3.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        $(function () {
            getAllStudnets();
        });
        function getAllStudnets() {
            $.ajax({
                url : "${pageContext.request.contextPath}/students.do",
                type:"GET",
                dataType: "json",
                success: function (data, status) {
                    var content = JSON.parse(JSON.stringify(data));
                    var tbodyElement = document.getElementById("tb");
                    if(content.code==200){
                        var students=content.students;
                        for(var i=0;i<students.length;i++){
                            var trElement= document.createElement("tr");
                            var ks=Object.keys(students[i]);
                            console.log("ks",ks);
                            for(var j=0;j<ks.length;j++){
                                var td=document.createElement("td");
                                td.innerHTML=students[i][ks[j]];
                                trElement.appendChild(td);
                            }
                            tbodyElement.appendChild(trElement);
                        }
                    }else{
                        alert("请求服务出错")
                    }
                }
            })
        }
    </script>
</head>
<body>
<table class="table table-striped">
    <thead>
    <tr>
        <th>学号</th>
        <th>班级号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>系</th>
        <th>进班时间</th>
    </tr>
    </thead>
    <tbody id="tb">

    </tbody>
</body>
</html>

* 修改滑动条

 

 

* 解决日期输出格式问题

    * 全局处理

        * 配置GsonHttpMessageConverter解析器

        * 所有用到GsonHttpMessageConverter解析器,都会受影响

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter">
                <property name="gson">
                    <bean class="org.springframework.http.converter.json.GsonFactoryBean">
                        <property name="serializeNulls" value="true"></property>
                        <property name="dateFormatPattern" value="yyyy/MM/dd"></property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

 

* 局部处理

        * 使用@JsonAdapter:指定DateTypeAdapter

 * 由于默认效果就是这样,所以我们可以自定义

 

* copy源码,自定义自己DateAdapter

/**
 * @author xiaozhao
 */
public class DateAdapter extends TypeAdapter<Date> {
    private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    @Override
    public Date read(JsonReader in) throws IOException {
        if (in.peek() == JsonToken.NULL) {
            in.nextNull();
            return null;
        }
        return deserializeToDate(in.nextString());
    }

    private synchronized Date deserializeToDate(String json) {
            try {
                return sdf.parse(json);
            } catch (ParseException ignored) {}

        try {
            return ISO8601Utils.parse(json, new ParsePosition(0));
        } catch (ParseException e) {
            throw new JsonSyntaxException(json, e);
        }
    }

    @Override
    public synchronized void write(JsonWriter out, Date value) throws IOException {
        if (value == null) {
            out.nullValue();
            return;
        }
        out.value(sdf.format(value));
    }
}

 

* 在单元测试的时候,事务控制有效

    * 在控制层调用的时候,事务无效

Should roll back transaction but cannot - no transaction available

   * 解决方案:事务定义在方法里创建

  * jsp放进WEB-INF

       * 方式一(后端适配法,但是增加了开发的工作量)

           * 由于我们的网页要嵌在iframe,首先先要访问tab.jsp 

             * 通过ztree点击某个项,访问toTransfer.do

 * 这样就是浏览器就导致浏览器再次访问,是不可以看到WEB-INF里面的内容,需要在Controller再转一次

 

 

 * 方式二:修改前端bootstraptab框架的源码(技术攻关)

            * 思路:不让bootstraptab框架去异步请求带有iframe的网页,而是在框架动态加上iframe

//update by xiaozhao
    BaseTab.prototype.addIFrame=function(id,url){
        var iframeElement=document.createElement("iframe");
        iframeElement.style.width="100%";
        iframeElement.style.height="600px";
        iframeElement.style.border="none";
        iframeElement.src=url;
        $("#" + id).append(iframeElement);
    }

 

 * 修改Controller

* 整理工程的jsp

猜你喜欢

转载自blog.csdn.net/linzhaoliangyan/article/details/88808583