ecside自动提交两次的原因剖析。

  原因:查询页面一般有两个form,第一个form是我们提交查询条件所用(这里暂定name为form1),第二个是ecside生成(这里暂定name为ecform)。
       为了实现ecside的翻页,我们将ecform的action地址写的与form1一样。不同是,为了使ecside翻页时带
上我们的查询条件,以防翻页时不至于将全部数据查出来 ,我们在ecform的action地址中使用了url跟上查询条件的字段。
       当点击form1的提交按钮,而后到action执行查询,完成后形成一个list集合,然后返回到查询页面。这时
当页面解析ecside标签时发生第二次提交,这次提交的肯定就是ecform请求的(第二次是提交的ecform是可以肯定,
但,是解析ecside标签时提交,还是当我们点form1的提交按钮时本来就将两个form都提交了,这点还需要考察。)
一般情况下,两次提交的条件一样,两次查询的结果也一样,那么翻页的效果也可以正常实现。但是还是不能排除一些特殊情况,查询完成后能显示正确结果,但当我们点击ecside翻页时发生空白或者没有数据了,这种情况在我们这次项目中出现很多。
       提交两次的原因找到了,相信大家都有自己的解决办法。目前本人还没有个通用的办法避免两次提交。但是针对翻页发生空白和无数据的情况,该如何查找原因和解决问题呢。
       翻页空白或无数据的常见原因。我针对一种情况和大家讨论一下。前面说到我们ecform的action带有查询条件,现在我们假定其中的个条件是按编号(myid)查询,那么ecform的action地址中就有个myid=。同时这个编号又是ecside里面显示的一个字段。
       我们现在要显示myid的字段中增加一个隐藏域,以便我们同时操作多条记录。
                  
                     <ec:column property="myid" title="编号">
                            <input name="myid" type="hidden" value="${press.myid}" />
                     </ec:column>

       myid在这页中隐藏域的值有1,2,3,4,5  。 那么当我们点击翻页时ecside提交ecform,这个时候 action类中对于这个按编号查询时接收值是什么样的呢?
       假定myid是 action类model的一个字段(是属性也可),因为model不仅可以接收post方式提交的值,也可以接收get方式提交的值,这是this.getModel().getMyid()返回的值是这样的形式:",1,2,3,4,5"  。到hibernte查询条件则是:criteria.add(Expression.eq("myid", ",1,2,3,4,5"));。很明显这样按ID查询是得不到结果的。这样就造成了第一次有结果,翻页时且数据集合变成了空。
       知道原因解决方法就很简单了,可以给隐藏域另起个名字,避免和查询条件的重名。当然还很多其他更好的解决办法,可以根据自己的情况而定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值