1,防表单重复提交,同样使用Struts内置的拦截器token来完成功能。
a,在Struts的默认拦截器中没有防表单重复提交功能,我们需要在action节点下注册一个,代码如下:
<interceptor-ref name="defaultStack" />
<!-- 增加令牌拦截器 -->
<interceptor-ref name="token">
<!-- 哪些方法被令牌拦截器拦截 -->
<param name="includeMethods">insert</param>
</interceptor-ref>
param中可以指定另一个值excludeMethods即指定除了哪些方法都执行拦截器, includeMethods指定为哪些方法执行拦截器
b,配置一个错误视图,即拦截到重复提交后跳转到那个页面:
<!-- 当用户重复提交表单的时候,struts2会自动转到此错误页面 -->
<result name="invalid.token">/WEB-INF/jsp/message.jsp</result>
-------------------------------------------------------------------------------------------------------------------------------------
2,数据回显,很多地方都需要用到数据回显,比如编辑页面,或者是验证的时候验证失败,之前的数据回显是通过将数据存放到域中然后再每个表单项中设置value相对比较麻烦.。struts的回显则相对比较简单,但必须使用struts的控件。
a,在跳转到比如编辑页面或者提交页面的方法中加上如下代码:
//到到值栈
ValueStack vs = ActionContext.getContext().getValueStack();
//清空栈顶元素,避免不必要的回显数据
vs.pop();
//压栈,cus即用来封装数据的实体。
vs.push(cus);
数据回显功能比较强大,如之前比较烦躁的radio或者select等控件同样不需要特殊处理,处理方式和其他控件一致,但是必须使用struts的控件。struts的控件radio和select等控件和html控件差别很大,其他控件则大同小异。例如
<s:radio name="gender" id="gender" list="#{'男':'男','女':'女'}"></s:radio>
使用map的形式给radio赋值,list项必须填,客户端生成 的html代码显示为map的value,值即为map的key
<s:select list="#session.departlist" listKey="id" listValue="dname" name="depart" ></s:select>
下拉框的值来自session域中的Bean集合,需要指定每一项显示的值listValue和每一项真正的值listKey都是Bean的属性