SSH学习笔记之hibernate中的set排序以及struts中的token

来源:互联网 发布:js中des加密解密 编辑:程序博客网 时间:2024/06/03 07:08

 

SSH学习笔记之hibernate中的set排序以及struts中的token

 

 

 

问题一:hibernate配置文件中的set

 

因为set本身是不排序的,所以在你要想输出按照你的意愿输出就得把set里面的元素进行排序,这就用到了 order-by属性

  具体形式如下

 

       <set name="answers" inverse="true" cascade="all" 

                                    order-by="anstime desc">

       <key column="qid"/>

       <one-to-many class="Answer"/>

 

另外一种方法就是在set中加sort,但我不喜欢这种方法,不够灵活!

当然在你的一对多,或者多对多关联中,你也可以用list,可以用bag!

 

问题二struts中防止重复提交问题

 

我得到的讯息是用token 但得提交到两个action 执行效率方面有点儿问题这样的话,还不如再做一个中间页面,来个经典的提交成功什么的!再有的话,我们可以用JavaScript,具体的代码如下!

 

<script language="javascript">
    var checkSubmitFlg = false;
    function checkSubmit() {
      if (checkSubmitFlg == true) {
         return false;
      }
      checkSubmitFlg = true;
      return true;
   } 

</script>

<form action="***.do" method="post" onsubmit="return checkSubmit();">

 

可是如果浏览器限制脚本的话,也还是没折,要不在服务器段再做个token,哎!总之,麻烦所以,我还是觉得做个中间页面的好,但别人要是回退回去再提交呢!(有这么无聊的人么),所以最安全的还是做个token!可是真的是很麻烦啊:

第一步:先假设有这样一个用户输入界面 reply.jsp  假如我们是通过beforeReply.jsp进入reply.jsp的,那么beforeReply.jsp就得提交到一个action上,在这个A.action的执行方法里面,我们必须写下这么一句代码 this.saveToken(request),    这是struts为我们定义好的一个方法,struts会调用一系列的方法,自动的给我们生成一个token的字符串,保存到org.apache.struts.action.TOKEN    字段中,这个长的跟个什么似的字段其实就是一个变量,然后struts又会调用session.setAtribute(“org.apache.struts.action.TOKEN,“token”);此时算是第一步工作完成了,淡然我们写代码到不是很累,一句this.saveToken(request)就够了,可是后台却一点儿也不轻松啊!

 

第二步:假设我们把reply.jsp中的表单提交到B.action里面,则我们在这个action里面,需要做这个判断,

If(this.isTokenValid(request)){

     //你的保存数据的代码

      this.resetToken(request);

      或者再调用一次this.saveToken(request);

}

到这儿有点儿懵吧!别着急,其实在提交到action之前,你得在reply.jsp

的form中加入一个隐藏域,

<inputtype="hidden" name="org.apache.struts.taglib.html.TOKEN" value="<%=session.getAttribute("org.apache.struts.action.TOKEN")%>"   

什么意思,其实org.apache.struts.taglib.html.TOKEN  也是struts给我们定义的一个字段,在这个时候,org.apache.struts.taglib.TOKEN这个字段里面的值已经在前一步生成了,这个隐藏域的意思就是把org.apache.struts.action.TOKEN里面的值赋值给org.apache.struts.taglib.html.TOKEN这个字段,在你调用this.isTokenValid(request)时候,它比较的就是这两个字段的值相等不相等,如果相等,说明不是重复提交,可以保存数据,然后重新生成TOKEN或者TOKEN的值设置为空,你再次提交的时候org.apache.struts.action.TOKEN里面的值已经改变或者没有了,而你org.apache.struts.taglib.html.TOKEN中的值却是你一开始在beforeReply时设置的值!所以两个自然不相等,当然不能保存数据!

  哎,终于说完了!累啊!其实如果你用的是struts自带的form,那么你可以不加这个隐藏域,因为struts会给你自动生成,不过我向来不喜欢struts的标签!

 

   我会继续,把我遇到并且解决的问题,写上来!有人看了,希望你们能得到些什么!没人看的话,我就当是自己的一个程序日记了!OK!

原创粉丝点击