Struts2对json有非常好的支持。为了支持json
,我们只需要如下三步:
1. 导入struts2-json-plugin-{STRUTS_VERSION}.jar
2. 让package继承json-default
3. 将action返回的result的type设置为json
HelloAction.java
public class HelloAction {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
return "success";
}
配置struts.xml如下:
<package name="demo" namespace="/" extends="json-default">
<action name="hello" class="action.HelloAction">
<result type="json"
></result>
</action>
</package>
访问hello.action?message=hello
浏览器会打开保存窗口,因为浏览器默认不会显示action文件的内容。保存结果,然后用记事本打开,会看到如下串: {"message":"hello"}
在不需要json的字段的get方法上加注解
@JSON(serialize = false)
dispatcher类型表示将请求转发给其他资源。而redirect是重定向到其他资源(参数会丢失,地址栏会变化。可以防止用户刷新浏览器重复提交表单的信息)。
<package name="default" extends="struts-default">
<action name="showPerson" class="com.cz.action.ShowPerson">
<result name="success">/showPerson.jsp</result>
</action>
<!-- dispatcher resytype test -->
<action name="test" class="com.cz.action.DispatcherTest">
<result type="dispatcher">/testSuccess.jsp</result>
</action>
<!-- redirect resytype test -->
<action name="test2" class="com.cz.action.DispatcherTest">
<result type="redirect">/testSuccess.jsp</result>
</action>
</package>
拦截器
可以在Action调用前或后执行代码
许多框架的核心功能都是通过拦截器来实现的.如重复提交(double-submit),类型转换,对象属性填充,校验,文件上传等
每一个拦截器都是可插拔的
每一个Action都可以单独配置拦截器
拦截器在栈中的配置顺序决定了拦截器的调用顺序。
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="timer" class=".."/>
<interceptor name="logger" class=".."/>
</interceptors>
<action name="login" class="tutorial.Login">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<result name="input">/login.jsp</result>
<result name="success" type="redirect-action">/secure/home</result>
</action>
</package>
Struts2解决重复提交的方式非常简单,分为两步:
1. 在需要防止出现重复提交的表单中增加如下标签:<s:token/>
eg:
<s:form action="double" namespace="/demo">
<s:token></s:token>
<s:textfield label=“some value" name=“value"></s:textfield>
</s:form>
2. 在处理表单提交的action中增加如下拦截器的引用: <interceptor-ref name="token"></interceptor-ref>
另外我们还需要指定出现重复提交错误时,返回什么结果给用户,如:
<result name="invalid.token">/doublepost.jsp</result>
一个完整的配置如下:
<action name="double" class="action.DoublePost">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
<result name="invalid.token">/doublepost.jsp</result>
<result>/login.jsp</result>
</action>
校验:
<validators>
<field name="bar">
<field-validator type="required">
<message>You must enter a value for bar.</message>
</field-validator>
<field-validator type="int">
<param name="min">6</param>
<param name="max">10</param>
<message>bar must be between ${min} and ${max}, curren
value is ${bar}.</message>
</field-validator>
</field>
<field name="bar2">
<field-validator type="regex">
<param name="regex">[0-9],[0-9]</param>
<message>The value of bar2 must be in the format "x, y",
where x and y are between 0 and 9</message>
</field-validator>
</field>
<field name="date">
<field-validator type="date">
<param name="min">12/22/2002</param>
<param name="max">12/25/2002</param>
<message>The date must be between 12-22-2002 and 12-25-
2002.</message>
</field-validator>
</field>
<field name="foo">
<field-validator type="int">
<param name="min">0</param>
<param name="max">100</param>
<message key="foo.range">Could not find foo.range!</message>
</field-validator>
</field>
<validator type="expression">
<param name="expression">foo lt bar </param>
<message>Foo must be greater than Bar. Foo = ${foo}, Bar =
${bar}.</message>
</validator>
</validators
分享到:
相关推荐
struts2学习总结之基础篇,好好学习吧。。。 愿与广大热爱编程人士共享!
java面试题自我总结分为:基础篇,数据库篇,框架篇(Struts,Spring,ajax等) 要勤奋学习,也要善于总结,此文档先给勤奋好学,努力拼搏的朋友们~
第1篇 基础篇 第1章 Web安全简介 2 1.1 服务器是如何被入侵的 2 1.2 如何更好地学习Web安全 4 第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 ...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
你把解决某类问题的方法总结归纳到理论高度,那就是模式。??Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用...