您的位置:首页 > 编程语言 > Java开发

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

2009-03-11 13:13 543 查看
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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐