遍历节点问题

在strus2的action中根据1个节点遍历出其下所有的子节点。

是一个数据库表,有父子关系?如果是,那跟Struts没关系,可以使用递归

假设采用Hibernate查询,有Company公司对象,公司自包含子公司,对公司进行遍历:

[code="java"]
/**
* 递归遍历公司及子公司
*
* @param companies 公司对象列表
*/
@SuppressWarnings("unchecked")
private String getChildCompanies(Collection companies) {
List jsonList = new ArrayList();

    Company[] companyArray = companies.toArray(new Company[0]);
    // 按序号排序
    Arrays.sort(companyArray, new Comparator() {
        public int compare(Object o1, Object o2) {
            Company c1 = (Company) o1;
            Company c2 = (Company) o2;
            Long result = c1.getOrderNum() - c2.getOrderNum();
            return result > 0 ? 1 : result < 0 ? -1 : 0;
        }
    });

    // 遍历每个节点
    for (Company company : companyArray) {
        // 这里处理你自己要处理的业务
        jsonList.add(company.getCompanyName());

        // 获取子节点列表
        Set<Company> childCompanies = company.getCompanies();

        // 如果当前节点存在子节点,则递归遍历
        if (CollectionUtils.isNotEmpty(childCompanies)) {
            jsonList.add(getChildCompanies(childCompanies));
        }
    }

    JSONArray jsonArray = JSONArray.fromObject(jsonList);
    return jsonArray.toString();
}

[/code]

按照类似的方法,根据实际业务进行处理

用Action去调用递归的方法,可以的
/**

  • 你的Action
    */
    public String yourAction() {
    ...

    调用递归方法getChildCompanies(...)

    ...
    return SUCCESS;
    }

以前做个。后台把数据组装成json.传递给前台.
代码如下,仅供参考
[code="java"]public ActionForward associationBy(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setHeader("Content-Type", "text/json");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();

    String alertId = request.getParameter("alertId");
    List<Alert> list = alertService.associationByAlert(Integer
            .parseInt(alertId)); // id=2;

    List<JSONObject> jsonArray = new ArrayList<JSONObject>();
    if (list.size() > 0) {
        for (int i = 0; i < list.size(); i++) {
            Alert childEntity = list.get(i);
            JSONObject children = new JSONObject();
            List<Alert> subList = alertService
                    .associationByAlert(childEntity.getAlertId());
            if (subList.size() > 0) {
                children.put("id", childEntity.getAlertId());
                children.put("category", childEntity.getCategory());
                children.put("agent", childEntity.getAgent());
                children.put("node", childEntity.getNode());
                children.put("uiProvider", "col");
            } else {
                children.put("id", childEntity.getAlertId());
                children.put("category", childEntity.getCategory());
                children.put("agent", childEntity.getAgent());
                children.put("node", childEntity.getNode());
                children.put("uiProvider", "col");
                children.put("leaf", true);
            }
            jsonArray.add(i, children);
        }
    }
    out.write(jsonArray.toString());
    out.close();
    return null;
}[/code]