`
suhongliang5332
  • 浏览: 23595 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类

Struts2+freemarker实现动态表头输出

 
阅读更多

首先创建一个树的节点

package com.stxdalian.redbook.structure;

import java.util.LinkedList;

public class TreeNode {
	String data;
	TreeNode parent;
	LinkedList<TreeNode> childlist;
	TreeNode()
	{
		data = null;
		childlist = new LinkedList<TreeNode>();
		parent = null;
	}
}

 再实现树的基本操作

package com.***.redbook.structure;

import java.util.ArrayList;
import java.util.HashMap;

import javassist.expr.NewArray;


public class MultiTree {
	ArrayList<String> resultExcel = new ArrayList<String>();
	ArrayList<ArrayList<Object>> tempResult;
	public MultiTree(){
		tempResult = new ArrayList<ArrayList<Object>>();
		TreeNode root = new TreeNode();
		root.data="root";
		ArrayList<String> testArr = new ArrayList<String>();
		testArr.add("ddd");
		testArr.add("aaa");
		testArr.add("ccc");
		testArr.add("bbb/x");
		testArr.add("bbb/y");
		testArr.add("eee/a");
		testArr.add("eee/b");
		testArr.add("eee/c/a");
		testArr.add("eee/c/m");
		testArr.add("eee/c/n");
		for (String string : testArr) {
			arrTotree(string,root);
		}
		System.out.println("--------------------->>"+getMaxTreece(root));
		treeToArr(root,0,getMaxTreece(root));
		treeToTable(tempResult,getMaxTreece(root));
	}
	/**
	 * 返回一个表格的头
	 * 数据类型为 arraylist<行arraylist<[value='',rowspan='',colspan='']>>
	 * @param tmpArr
	 * @param maxce
	 * @return
	 */
	public ArrayList<ArrayList<HashMap<String,String>>> treeToTable(ArrayList<ArrayList<Object>> tmpArr,int maxce){
		ArrayList<ArrayList<HashMap<String,String>>> totalresultTable = new ArrayList<ArrayList<HashMap<String,String>>>();
		for(int i=0;i<=maxce;i++){
			ArrayList<HashMap<String,String>> resultTable = new ArrayList<HashMap<String,String>>();
			for(ArrayList<Object> item:tmpArr){
				HashMap<String, String> hangHS = new HashMap<String, String>();
				if(item.get(3).equals(i)){
					hangHS.put("value", item.get(0).toString());
					hangHS.put("rowspan", item.get(1).toString());
					hangHS.put("colspan", item.get(2).toString());
					resultTable.add(hangHS);
				}
			}
			totalresultTable.add(resultTable);
		}
		return totalresultTable;
	}
	
	//TODO 传递任意一棵树,计算位置
	
	/**
	 * 把一棵树转换为数组   【名称,合并的层数,合并的列数,树的层次】
	 * 行不等于0的时候,要回行输出
	 * @param curtroot
	 */
	public void treeToArr(TreeNode f,int level,int maxce){

		for(int i=0; i<f.childlist.size(); i++) {
			TreeNode t = f.childlist.get(i);
			if(! t.childlist.isEmpty()) {
				ArrayList<Object> tmpInarr = new ArrayList<Object>();
				tmpInarr.add(t.data);
				tmpInarr.add("0");
				tmpInarr.add(getTreeye(t));
				tmpInarr.add(level);
				tempResult.add(tmpInarr);
				System.out.println(t.data+0+"-"+getTreeye(t)+"-"+level);
				treeToArr(t, level + 1,maxce);
			}else{
				ArrayList<Object> tmpInarr = new ArrayList<Object>();
				tmpInarr.add(t.data);
				tmpInarr.add((maxce-level+1));
				tmpInarr.add(getTreeye(t));
				tmpInarr.add(level);
				tempResult.add(tmpInarr);
				System.out.println(t.data+(maxce-level+1)+"-"+getTreeye(t)+"-"+level);
			}
		}
	}
	/**
	 * 创建一个树
	 * @param testStr  树结构字符串
	 * @param curtroot 根节点
	 */
	public void arrTotree(String testStr,TreeNode curtroot){
		if(testStr.indexOf("/")>0){
			int endIndex = testStr.indexOf("/");
			TreeNode nodeChild ;
			//判断这个节点是否已经存在,存在就不要建了
			if(isexist(testStr.substring(0, endIndex),curtroot)==null){
				nodeChild = new TreeNode();
				nodeChild.data = testStr.substring(0, endIndex);
				curtroot.childlist.add(nodeChild);
			}else{
				nodeChild = isexist(testStr.substring(0, endIndex),curtroot);
			}
			String nextxt = testStr.substring(endIndex+1);
			arrTotree(nextxt,nodeChild);
		}
		else{
			TreeNode nodeChild = new TreeNode();
			nodeChild.data = testStr;
			curtroot.childlist.add(nodeChild);
		}
	}
	/**
	 * 判断节点是否存在
	 * @param testStr  测试的节点
	 * @param curtroot 当前树
	 * @return
	 */
	public TreeNode isexist(String testStr,TreeNode curtroot){
		 TreeNode currtchild = null ;
		 for(int i=0; i<curtroot.childlist.size(); i++) {
			 if(testStr.equals(curtroot.childlist.get(i).data)){
				 currtchild = curtroot.childlist.get(i);
			 }
		 }
		 return currtchild;
	}
	/**
	 * 递归显示树
	 * @param f
	 * @param level
	 */
	public void displaytree(TreeNode f, int level) {       
		String preStr = "";
		int m=0;
		for(int i=0; i<level; i++) {
			preStr += "    ";
			m+=1;
		}
		for(int i=0; i<f.childlist.size(); i++) {
			TreeNode t = f.childlist.get(i);
			System.out.println(preStr + "-"+t.data+m);
			if(! t.childlist.isEmpty()) {
				displaytree(t, level + 1);
			}
		}
	}
	/**
	 * 获得一个树的最大层次
	 * @param f
	 * @return
	 */
	public int getMaxTreece(TreeNode f){
		int temp = 0;
		for (int i = 0; i < f.childlist.size(); i++) {
			if(temp < this.getTreece(f.childlist.get(i))){
				temp = this.getTreece(f.childlist.get(i));
			}
		}
		return temp;
	}
	/**
	 * 获得树的层次,根为-1,第一层为0
	 * @param f
	 * @return
	 */
	public int getTreece(TreeNode f){
		int result = 0;
		for(int i=0; i<f.childlist.size(); i++) {
			int tmp=0;
			if(f.childlist.get(i).childlist.isEmpty()){
				result = 1;				  //为叶子节点,那么层次为1
			}
			else{
				result = result+  getTreece(f.childlist.get(i));
			}
		}
		return result;
	}
	/**
	 * 获得树的叶子个数
	 * @param f
	 * @return
	 */
	public int getTreeye(TreeNode f){
		int result = 0;
		for(int i=0; i<f.childlist.size(); i++) {
			int tmp=0;
			if(f.childlist.get(i).childlist.isEmpty()){
				result = result+1;				  //为叶子节点
			}
			else{
				tmp = getTreeye(f.childlist.get(i));
			}
			result = result + tmp;
		}
		return result;
	}
	
}

 3

 SELECT 'SHIP NO.'  AS HEADERS,
		        'PROJECT_NO' AS DEPT_CODE,
		        '0' AS POSITION_CODE,
		        '0' AS WORK_CODE
		FROM DUAL 
		UNION ALL
		SELECT  CASE WHEN #{lang}= 'KOR' THEN '시리즈'
			    ELSE '系列'
				END HEADERS ,
		        'SERIES_PROJECT' ,
		        '1',
		        '1'
		FROM DUAL 
		UNION ALL
		SELECT  CASE WHEN #{lang}= 'KOR' THEN '선종'
			    ELSE '船种'
				END HEADERS ,
		        'SHIPTYPE' ,
		        '2',
		        '2'
		FROM DUAL  
		UNION ALL
		SELECT  CASE WHEN #{lang}= 'KOR' THEN '선주'
			    ELSE '船东'
				END HEADERS,
		        'OWNER' ,
		        '3',
		        '3'
		FROM DUAL 
		UNION ALL
		SELECT  CASE WHEN #{lang}= 'KOR' THEN '선급'
			    ELSE '船级社'
				END HEADERS,
		        'CLASS1' ,
		        '4',
		        '4'
		FROM DUAL
		UNION ALL
		SELECT  CASE WHEN #{lang}= 'KOR' THEN 'PC(정)'
			    ELSE 'PC(正)'
				END HEADERS,
		        'PC' ,
		        '5',
		        '5'
		FROM DUAL 
		
		UNION ALL
		
		SELECT HEADERS, DEPT_CODE,POSITION_CODE,WORK_CODE FROM (
		SELECT DISTINCT  HEADERS,DEPT_CODE,POSITION_CODE,WORK_CODE,WC_STEP, PC_STEP
		 FROM (
		    SELECT D.DEPT_NAME,
		           D.DEPT_CODE,
		           P.POSITION_CODE,
		           P.WORK_CODE ,
		           WC.C_STEP AS WC_STEP, 
                   PC.C_STEP AS PC_STEP,
		           STX_IBD_KEYMAN_PKG.GET_CODE_NAME(#{lang},'WCODE',   P.WORK_CODE)||'/'||
                   REPLACE(DECODE(#{lang},'KOR',D.ATTRIBUTE2,D.DEPT_NAME),'Team','' )||'/'||
                   STX_IBD_KEYMAN_PKG.GET_CODE_NAME(#{lang},'PCODE',   P.POSITION_CODE) AS  HEADERS
		    FROM STX_IBD_PM         P,
		         STX_IBD_PM_PROJECT PR,
                 LPM_PROJECT_HI     L,
		         STX_COM_INSA_USER  U,
		         STX_COM_INSA_DEPT  D,
                 STX_IBD_ISSUE_CODE PC,
                 STX_IBD_ISSUE_CODE WC
		    WHERE P.PROJECT_NO    = PR.PROJECT_NO
            AND   P.PROJECT_NO    = L.PROJECTNO
		    AND   P.EMPNO         = U.EMP_NO
		    AND   U.DEPT_CODE     = D.DEPT_CODE
			AND   P.POSITION_CODE = PC.CID
	        AND   P.WORK_CODE     = WC.CID
	        AND   PC.GCID         = 'PCODE'
	        AND   WC.GCID         = 'WCODE'
		    AND   NVL(PR.END_DATE, TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')) &gt;=TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')
		    AND   NVL(PC.DISABLE_DATE, TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')) &gt;=TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')
		    AND   NVL(WC.DISABLE_DATE, TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')) &gt;=TO_DATE(TO_CHAR(SYSDATE ,'YYYY-MM-DD'),'YYYY-MM-DD')
            AND   (#{project_no} IS NULL OR ( #{project_no} IS NOT NULL AND P.PROJECT_NO  =  #{project_no}))
            AND   P.POSITION_CODE LIKE #{position_code}
            AND   P.WORK_CODE     LIKE #{work_code}
            AND   (#{dept_code} IS NULL OR ( #{dept_code} IS NOT NULL AND U.DEPT_CODE  =  #{dept_code}))
            AND   L.SHIPTYPE      LIKE #{shiptype}
            AND   (#{empnm} IS NULL OR ( #{empnm} IS NOT NULL AND ( U.USER_NAME LIKE '%${empnm}%' OR U.USER_NAME_KOR LIKE '%${empnm}%')))
		    AND   D.USE_YN ='Y'
		    AND   P.POSITION_CODE >='2'
		    ORDER BY TO_NUMBER(WC.C_STEP),D.DEPT_CODE,TO_NUMBER(PC.C_STEP)
		    )
		  ORDER BY TO_NUMBER(WC_STEP),DEPT_CODE,TO_NUMBER(PC_STEP)
		) 

 

分享到:
评论
2 楼 suhongliang5332 2013-08-07  
liu_bia 写道
这个显示的界面是怎样的?

可以直接在html输出
1 楼 liu_bia 2013-07-29  
这个显示的界面是怎样的?

相关推荐

    struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版

    struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...

    struts2+hibernate+freemarker项目实例

    Struts2、Hibernate和FreeMarker是Java开发领域中常见的三个开源框架,它们分别在MVC(Model-View-Controller)架构的不同层面发挥着关键作用。这个"struts2+hibernate+freemarker"项目实例是将这三个框架集成到一起...

    hibernate3+struts2+spring2+freemarker 主流技术架构 实例

    • 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...

    JEECMS源码(hibernate3+struts2+spring2+freemarker +jquery +json等技术)

    JEECMS使用目前java主流技术架构:hibernate3+struts2+spring2+freemarker。AJAX使用jquery和json实现。视图层并没有使用传统的JSP技术,而是使用更为专业、灵活、高效freemarker。 数据库使用MYSQL,并可支持orcale...

    spring+hibernate+struts2+freemarker SSH2 新闻发布系统

    在新闻发布系统中,Freemarker被用作视图层技术,与Struts2结合,根据Action返回的数据动态生成静态页面。这样可以将业务逻辑与表现逻辑分离,使得代码更加清晰。 5. **用户认证与权限管理** 系统中预设了一个管理...

    Struts2+Spring2.5+Hibernate3+Freemarker整合

    整合S2SH+Freemarker,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。

    freemarker+struts2+spring完美整合!

    部署到tomcat中, 访问/freemarker/build_index.action 点击首页生成,当显示生成成功过后 然后访问 ... 已经完美将struts2+freemarker+spring整合~ 希望对你们有所帮助。 经测试:tomcat5.5 无法正常运行

    Struts2+Spring2.5+Hibernate3+Freemarker框架整合

    整合S2SH+Freemarker+oscache,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。

    java基于SpringBoot+freemarker实现的人事管理系统

    基于SpringBoot+freemarker实现的人事管理系统分为七大模块:绩效考核,招聘管理,档案管理,工资管理,考勤管理,培训管理,系统管理。本系统最大特色是有强大和灵活的权限控制功能,所有菜单,按钮功能均可由管理...

    Struts2+FreeMarker部署

    通过这种方式,开发者可以利用Struts2的强大功能处理业务逻辑,同时利用FreeMarker的简洁模板语言生成动态视图,实现MVC架构的良好分离。这种结合在实际项目中非常常见,尤其适合大型复杂的企业级应用。

    struts2+freemarker

    Struts2是Action框架,主要负责处理用户请求、业务逻辑控制以及与视图层的交互,而Freemarker则是一种模板引擎,用于生成动态HTML或其他格式的输出。 **Struts2** 是Apache软件基金会下的一个开源项目,它是基于MVC...

    struts2+freemarker 生成静态页面

    总之,“struts2+freemarker 生成静态页面”是一个旨在提升Web应用性能的技术实践,通过结合Struts2的MVC框架和FreeMarker的模板引擎,实现了动态内容到静态HTML的转化,为用户提供更快的加载速度和更好的浏览体验。...

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!

    基于springboot+mvc+freemarker+aop实现校友信息管理系统源码.zip

    1、基于springboot+mvc+freemarker+aop实现校友信息管理系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考...

    Struts2+freemarker+flash 采集摄像头头像

    总之,“Struts2+freemarker+flash 采集摄像头头像”项目展示了如何利用传统的Web技术栈实现用户头像的在线采集和展示,其中涉及到了后端框架、模板引擎和前端多媒体交互等多个技术层面。尽管随着技术的发展,这些...

    struts2+freemarker 国际化

    Struts2和Freemarker是两个非常流行的Java Web开发框架,它们经常被一起使用来构建动态、交互式的Web应用程序。国际化(Internationalization,通常缩写为i18n)是软件开发中的一个重要概念,它允许应用程序支持不同...

    struts2+spring2+hibernate3+tiles+freemarker+ibatis 实现

    资源 struts2+spring2+hibernate3+tiles+freemarker+ibatis 架构图 的具体实现,注意没有java源文件,大家可以看一下配置,具体实现大家不防试一把 &lt;br&gt;下载架构图一目了然哦:...

    基于springboot+mvc+freemarker+aop实现校友信息管理系统.zip

    基于springboot+mvc+freemarker+aop实现校友信息管理系统.zip基于springboot+mvc+freemarker+aop实现校友信息管理系统.zip基于springboot+mvc+freemarker+aop实现校友信息管理系统.zip基于springboot+mvc+freemarker...

    Struts2+freemarker

    Struts2和FreeMarker是两种在Java Web开发中广泛使用的框架和技术。Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理业务逻辑和控制流程,而FreeMarker则是一个模板引擎,用于生成动态HTML或其他类型...

Global site tag (gtag.js) - Google Analytics