在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]