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


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6