`

struts2与json

 
阅读更多
json是一种数据格式,struts2中,通过引入struts2-json-plugin.jar。

 

编写Struts2的Action类:

public class LoginAction extends ActionSupport{
      private String name;//普通属性
      private Teacher teacher;//类属性
     private List<Student> students;//集合
    ......省略get,set

    public String returnName(){
               name = "12312312";
          return success;
    }
    
    public String returnTeacher(){
             teacher = new Teacher("wang",29);
     }

     public String returnList(){

        students  = new ArrayList<Student>();       
        Student s1 = new Student("li",13);
        Student s2 = new Student("zhang",13);
            
             students .add(s1);
             students .add(s2);
        
         return success;

      }
}

 

在struts.xml中配置action,这个地方是重点:

  1.要继承json-default包

   2.resulst 的type要设置为json

   3.对于普通属性和普通类属性,直接<param name="includeProperties">属性名</param>指定要返回的属性。

  但返回集合属性时,需要使用正则表达式了。

 <package name="json"  extends="json-default" >
        <action name="loginAction" class="loginAction"  method="xxx">
            <result name="success" type="json">
                  <!------- includeProperties 指定包括的属性--------->
      	<param name="includeProperties">name</param>
            </result>     
        </action>
  </package>
   <package name="json"  extends="json-default" >
        <action name="loginAction" class="loginAction" method="xxx">
            <result name="success" type="json">
                  <!------- includeProperties 指定包括的属性--------->
      	<param name="includeProperties">teacher</param>
            </result>     
        </action>
  </package>

        <action name="loginAction" class="loginAction" method="xxx">
        	<result name="success" type="json">
                  <!--如果返回的结果为集合,需要使用正则表达式来指定集合中实体的属性--->
        	    <param name="includeProperties">
        	          students\[\d+\]\.name,
                           styles\[\d+\]\.age	    
                   </param>
        	</result>
        </action>
    </package>

 

在页面中写js代码

 

function callback(data){

 

     //在js中使用eval('(' + json字符串 +')'),来转换为json对象。一定要加上'(' 和')'

      var jsonObj= eval( '(' + data+ ')' );      

    

   1.data为对应action中的普通属性   

    //如果data对应的是普通属性时,可以直接使用json对象.属性名的形式来使用该值

      document.getElementById("show").innerHTML = "name:"+jsonObj.name;

 

   2.data对应action中类属性

    //如果打他对应的是类属性,可以使用json对象.类属性.属性,来使用该类属性的属性值。

 document.getElementById("show").innerHTML = "name:"+jsonObj.teacher.name;

 

  3.data对应是集合属性

   //可以使用json对象.集合属性名,来得到该集合,然后遍历
  for(var i = 0;i<list.styles.length;i++){
       var style = list.styles[i];
       select.append("<option value='"+ style.name +"'>"+style.name+"</option>");

   }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics