jQuery MiniUI

标题: 表单提交后,列表页面刷新问题 [打印本页]

作者: ralf5753    时间: 2014-3-20 17:35:34     标题: 表单提交后,列表页面刷新问题

本帖最后由 ralf5753 于 2014-3-20 17:45 编辑

我的新增窗口有上传附件的功能,表单数据 和附件需要同时提交,所以没用Json格式提交,是submit提交form表单的,js如下:
<form id="form1" name="form1" method="post" action="../../user/addUser.do" enctype="multipart/form-data" >
         <input name="name" class="mini-textbox" required="true"/>
        <input name="Fdata" type="file"/>
        <div style="text-align:center;padding:60px;">               
           <a class="mini-button" onclick="onOk"  style="width:60px;margin-right:20px;">确定</a>      
            <a class="mini-button" onclick="onCancel" style="width:60px;">取消</a>
</div
</form>


function SaveData() {
                     form.validate();                     
            $("form:first").submit();
            CloseWindow();   
}
function onOk(e) {
            SaveData();
}

表单提交,窗口关闭,数据保存后,列表页面的数据没有自动刷新,请问这块应该怎么写?














作者: lost    时间: 2014-3-20 18:04:48

http://www.miniui.com/demo/#src=datagrid/datagrid.html
参考示例代码mini.open中的ondestroy中的reload();
作者: ralf5753    时间: 2014-3-21 10:22:30

lost 发表于 2014-3-20 18:04
http://www.miniui.com/demo/#src=datagrid/datagrid.html
参考示例代码mini.open中的ondestroy中的reload( ...

我userlist.jsp列表页就是用这个啊
function add2() {         
            mini.open({
                url: bootPATH + "../jsp/system/adduser.jsp",
                title: "新增员工", width: 600, height: 400,
                onload: function () {
                    var iframe = this.getIFrameEl();
                    var data = { action: "new"};
                    iframe.contentWindow.SetData(data);
                },
                ondestroy: function (action) {
                    grid.reload();
                }
            });
        }

adduser.jsp页面
通过
function SaveData() {
                     form.validate();     
if (form.isValid() == false) return;               
            $("form:first").submit();
            CloseWindow();   
}
这个提交后,userlist.jsp无法自动刷新
作者: factory    时间: 2014-3-21 11:53:55

ralf5753 发表于 2014-3-21 10:22
我userlist.jsp列表页就是用这个啊
function add2() {         
            mini.open({

grid.reload();是刷新表格啊

页面当然不会给你刷了

window.location.reload()试试
作者: ralf5753    时间: 2014-3-21 13:20:14

本帖最后由 ralf5753 于 2014-3-21 13:22 编辑
factory 发表于 2014-3-21 11:53
grid.reload();是刷新表格啊

页面当然不会给你刷了

我列表页面就用的DataGrid表格,我就是想刷新DataGrid表格的数据,
是不是,要使用grid.reload()刷新,
子页面必须使用
$.ajax({
                url: "",
                type: 'post',
                data: { data: json },
                cache: false,
                success: function (text) {
                    CloseWindow("save");
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.responseText);
                    CloseWindow();
                }
            });
这种方式提交并关闭弹出窗?
作者: factory    时间: 2014-3-21 13:36:14

ralf5753 发表于 2014-3-21 13:20
我列表页面就用的DataGrid表格,我就是想刷新DataGrid表格的数据,
是不是,要使用grid.reload()刷新,
子 ...

当mini.open打开的面板被关闭的时候,自然会跑到mini.open的ondestory里面,在里面让表格reload()好了

我们demo就是这样处理的
http://www.miniui.com/demo/#src=datagrid/datagrid.html
作者: ralf5753    时间: 2014-3-21 14:55:48

factory 发表于 2014-3-21 13:36
当mini.open打开的面板被关闭的时候,自然会跑到mini.open的ondestory里面,在里面让表格reload()好了

我 ...

我现在使用的页面就是你发的连接中的demo,我现在遇到的问题是
我的新增窗口需要上传多个附件,我必须把表单数据和上传的附件同时submit,所以没法用ajax提交json字符串,
DataGrid 数据表格中的js我没有改动,还是官方demo中的
function add() {           
            mini.open({
                url: bootPATH + "../jsp/system/adduser.jsp",
                title: "新增员工", width: 600, height: 360,
                onload: function () {
                    var iframe = this.getIFrameEl();
                    var data = { action: "new"};
                    iframe.contentWindow.SetData(data);
                },
                ondestroy: function (action) {
                    grid.reload();
                }
            });
        }
我是把这个新增窗口中原来ajax提交的JS修改成如下,
mini.parse();
var form = new mini.Form("form1");
function SaveData() {                    
                     form.validate();
                     if (form.isValid() == false) return;                    
                     var form1 = document.getElementById("form1");  
                     form1.submit();       
                window.CloseOwnerWindow();
        }
结果新增窗口关闭后DataGrid的数据没有自动刷新,
我在调试时遇到如下现象:
      我在mini.open中的ondestroy里加了alert调试,新增窗口关闭后可以执行alert,说明新增窗口关闭后肯定是进到ondestroy里了,手动关闭页面上弹出的alert后,会执行下一行的grid.reload()进行DataGrid的刷新。
      但是不加alert时,新增窗口关闭后却不会刷新。
请大神帮我分析下。
作者: felt    时间: 2014-3-21 17:15:37

ralf5753 发表于 2014-3-21 14:55
我现在使用的页面就是你发的连接中的demo,我现在遇到的问题是
我的新增窗口需要上传多个附件,我必须把 ...

本地测试在试用包里的页面修改用你的方法提交,关闭的时候还是会触发ondestroy里的代码
你还是不行电话请把页面打包上来

作者: ralf5753    时间: 2014-3-21 17:30:15

本帖最后由 ralf5753 于 2014-3-21 17:35 编辑
felt 发表于 2014-3-21 17:15
本地测试在试用包里的页面修改用你的方法提交,关闭的时候还是会触发ondestroy里的代码
你还是不行电话请 ...

[attach]4170[/attach]
主要是userlist.jsp这个页面中 add2()这个方法 和adduser2.jsp页面中SaveData()方法

作者: felt    时间: 2014-3-21 17:42:26

ralf5753 发表于 2014-3-21 17:30
主要是userlist.jsp这个页面中 add2()这个方法 和adduser2.jsp页面中SaveData()方法
...

你更新下MiniUI,我把demo里改成你的代码一样可以刷新的
作者: felt    时间: 2014-3-24 09:55:27

ralf5753 发表于 2014-3-24 09:42
我用的就是 for java Myeclipse V3.3这个最新版的,附件中是我用的js文件

不用把js打报上来
你跑下我按你的意思改的demo[attach]4182[/attach]
把2个页面放到demo下test文件夹里
子页面按确定到底会不会刷新父页面的grid

作者: ralf5753    时间: 2014-3-24 10:47:53

felt 发表于 2014-3-24 09:55
不用把js打报上来
你跑下我按你的意思改的demo
把2个页面放到demo下test文件夹里

我之前问题定位的不对,
应该说是datagrid有刷新,刷新时的查询操作比保存的操作还要快,
我刚刚在新增页面点击【确定】按钮之前,手动修改了数据库的数据,页面关闭后手动修改的数据在页面刷出来了,新增的数据却没刷出来,新增的数据确实已经存入数据库了,
看来还是用form表单提交附件降低了代码执行速度。
在mini.open的ondestroy中,能否接收到后台传过来的字符串呢?
如果能的话,接收字符串这块代码该如何写呢?加个循环等待的等待或许可以解决。
作者: factory    时间: 2014-3-24 10:54:36

ralf5753 发表于 2014-3-24 10:47
我之前问题定位的不对,
应该说是datagrid有刷新,刷新时的查询操作比保存的操作还要快,
我刚刚在新增页 ...

你在子页面,保存之后获取到后台返回的字符串.
定义一个全局变量, 把这个字符串赋值给他
然后再关闭.

子页面写个函数,return这个全局变量.

父页面mini.open的ondestory里面,跨页面调用子页面的这个函数,来获取这个后台返回的值




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2