Action向页面传送Json类型数据以及myBatis一对多查询

租书时最重要的功能就是根据类型查找书籍,书籍类型又分为一级分类和二级分类。实现该功能要:
⑴打开主页面时,页面直接跳出分类信息,这就要通过ajax传送Json类型数据。⑵在后台查询分类信息时,myBatis使用到一对多查询。
图下为效果图。
这里写图片描述
接下来讲述详细过程。
数据库设计:
⑴每一个类别都有一个父类,FATHERCATEGORY字段,是CATEGORYNO的外键,自表相连。
⑵若这个类别为父类,则它的FATHERCATEGORY为null;若为子类,则FATHERCATEGORY为相对应的父类主码。

CREATE TABLE `category` (
  `CATEGORYNO` varchar(5) NOT NULL,
  `CATEGORYNAME` varchar(10) NOT NULL,
  `FATHERCATEGORY` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`CATEGORYNO`),
  KEY `FK1` (`FATHERCATEGORY`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

实体类 Category.java:

public class Category {
    private String categoryNo;
    private String categoryName;
    private String fathercategoryno;
    private List<Category> soncategory;
    public String getCategoryNo() {
        return categoryNo;
    }
    public void setCategoryNo(String categoryNo) {
        this.categoryNo = categoryNo;
    }
    public String getCategoryName() {
        return categoryName;
    }
    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public String getFathercategoryno() {
        return fathercategoryno;
    }
    public void setFathercategoryno(String fathercategoryno) {
        this.fathercategoryno = fathercategoryno;
    }
    public List<Category> getSoncategory() {
        return soncategory;
    }
    public void setSoncategory(List<Category> soncategory) {
        this.soncategory = soncategory;
    }

}

mybatis数据库查找分类信息:

<resultMap type="Category" id="categoryMap">
        <id column="categoryno" property="categoryNo"/>
        <result column="categoryname" property="categoryName"/>
        <result column="fathercategory" property="fathercategoryno"/>
        <collection property="soncategory" ofType="Category" column="fathercategory">
        </collection>
    </resultMap>

其中子元素表示数据库中主码与实体类中元素的对应关系;表示数据库中普通字段与实体类中元素的对应关系;表示List类型,property表示实体类中对应元素,ofType表示对应元素的类型,column表示两者相关联的外键。
例:实体类中private List soncategory

学习于http://www.cnblogs.com/fsjohnhuang/p/4076592.html

查询:

<!-- 查询所有父分类 -->
    <select id="searchAllcategory" resultType="Category">
        select * from Category where fathercategory is null
    </select>

    <!-- 根据父分类查询子分类 -->
    <select id="searchByFather" resultMap="categoryMap" parameterType="String">
        select * from Category where fathercategory=#{fathercategoryno}
    </select>

查询后通过action将数据传送到页面。
先看struts.xml

<package name="main" namespace="/main" extends="struts-default,json-default">
        <action name="CategoryAction" class="com.gyt.frame.Action.CategoryAction">
            <result name="failure">/Pages/Ables/User/msg.jsp</result>
            <result type="json">
                <param name="root">result</param>
            </result>
        </action>
</package>

这里一定要继承json-default,并且要引入struts2-json-plugin-2.3.16.3.jar包。

CategoryAction.java.

@Controller
@Scope("prototype")
public class CategoryAction extends ActionSupport {
    @Autowired
    private CategoryService categoryservice;
    private String result;
    public String getResult() {
        return result;
    }


    public void setResult(String result) {
        this.result = result;
    }


    public CategoryService getCategoryservice() {
        return categoryservice;
    }


    public void setCategoryservice(CategoryService categoryservice) {
        this.categoryservice = categoryservice;
    }


    public String execute(){
        System.out.println("categoryAction执行");
        List<Category> list=new ArrayList<Category>();
        list=categoryservice.searchAllcategory();
        for(int i=0;i<list.size();i++){
            List<Category> li=new ArrayList<Category>();
//          System.out.println("category:"+list.get(i).getCategoryName());
            li=categoryservice.searchByFather(list.get(i).getCategoryNo());
            list.get(i).setSoncategory(li);
        }
        JSONArray jArray = new JSONArray();
        for(int i=0;i<list.size();i++){
            JSONObject json = new JSONObject();
            json=JSONObject.fromObject(list.get(i));
            jArray.add(json);
        }
        result=jArray.toString();
        return "success";
    }

}

这里需引入Json相关的jar包。不需要通过request向页面传送数据。直接通过struts配置文件即可。

页面ajax:

$.ajax({   
         type:"POST", //请求方式  
         url:"/SecondBooks/main/CategoryAction", //请求路径  
         cache: false,  
         async:false,   
         data:{method:"execute"},//传参  
         dataType: 'json',   //返回值类型  
         success:function(result){
            //data为返回的json字符串,这里转对象
            var json = eval("(" + result + ")");
            //alert(json);
             //alert(111); 
             bar.colorStyle = 4;
             bar.config.imgDir = "Pages/Users/img/";
             bar.config.radioButton=true;
             for(i in json){
                //alert(222);
                    for(j in json[i].soncategory){
                //alert(result[i].soncategory[j]);
                var categ=json[i].soncategory[j].categoryNo;
                bar.add(json[i].categoryName,json[i].soncategory[j].categoryName,"/SecondBooks/main/categorynoBook?currtentPage=1&categoryno="+categ, "body");
                //alert(categ);
                }
             //var me1=msg[i];  
         }  

         }
                });  

这里的重点是将json转为对象才能获取到数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值