当前位置: 代码迷 >> Web前端 >> 动态表单自定义(来钦波)
  详细解决方案

动态表单自定义(来钦波)

热度:533   发布时间:2012-11-04 10:42:42.0
动态表单自定义(回钦波)


结合Freemarker,将动态表单显示在公文的添加界面上

只需拷贝freemarker.jar包到类路径即可

1、了解Freemarker的基本使用(参考freemarker项目中的演示代码)
2、结合Freemarker动态显示表单
- DynaFormFunction.java
- WebRoot/document/add_input.jsp(使用自定义JSTL函数)


Java代码 复制代码
  1. package?com.bjsxt.oa.web; ??
  2. ??
  3. import?java.io.IOException; ??
  4. import?java.io.StringWriter; ??
  5. import?java.io.Writer; ??
  6. import?java.util.HashMap; ??
  7. import?java.util.Map; ??
  8. ??
  9. import?com.bjsxt.oa.manager.FormManager; ??
  10. import?com.bjsxt.oa.model.FlowForm; ??
  11. ??
  12. import?freemarker.cache.ClassTemplateLoader; ??
  13. import?freemarker.template.Configuration; ??
  14. import?freemarker.template.Template; ??
  15. import?freemarker.template.TemplateExceptionHandler; ??
  16. ??
  17. public?class?DynaFormFunction?{ ??
  18. ???? ??
  19. ????private?static?FormManager?formManager; ??
  20. ????private?static?Configuration?cfg?=?new?Configuration(); ??
  21. ????static{ ??
  22. ????????//定义模板文件应该从哪里加载,这是定义由DynaFormFunction类所在的路径下面的templates目录加载 ??
  23. ????????cfg.setTemplateLoader(new?ClassTemplateLoader(DynaFormFunction.class,"templates")); ??
  24. ????????cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); ??
  25. ????} ??
  26. ???? ??
  27. ????public?static?String?form(int?workflowId){ ??
  28. ????????try?{ ??
  29. ????????????//获得workflow对应的表单定义的数据 ??
  30. ????????????FlowForm?form?=?formManager.findForm(workflowId); ??
  31. ????????????if(form?==?null){ ??
  32. ????????????????return?null; ??
  33. ????????????} ??
  34. ???????????? ??
  35. ????????????Template?template?=?cfg.getTemplate(form.getTemplate()); ??
  36. ???????????? ??
  37. ????????????Map?root?=?new?HashMap(); ??
  38. ????????????root.put("form",?form); ??
  39. ???????????? ??
  40. ????????????//最终的输出的位置 ??
  41. ????????????Writer?out?=?new?StringWriter(); ??
  42. ???????????? ??
  43. ????????????template.process(root,?out); ??
  44. ???????????? ??
  45. ????????????return?out.toString(); ??
  46. ???????????? ??
  47. ????????}?catch?(Exception?e)?{ ??
  48. ????????????e.printStackTrace(); ??
  49. ????????} ??
  50. ???????? ??
  51. ????????return?null; ??
  52. ????} ??
  53. ??
  54. ????public?void?setFormManager(FormManager?formManager)?{ ??
  55. ????????DynaFormFunction.formManager?=?formManager; ??
  56. ????} ??
  57. }??
package com.bjsxt.oa.web;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import com.bjsxt.oa.manager.FormManager;
import com.bjsxt.oa.model.FlowForm;

import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

public class DynaFormFunction {
	
	private static FormManager formManager;
	private static Configuration cfg = new Configuration();
	static{
		//定义模板文件应该从哪里加载,这是定义由DynaFormFunction类所在的路径下面的templates目录加载
		cfg.setTemplateLoader(new ClassTemplateLoader(DynaFormFunction.class,"templates"));
		cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
	}
	
	public static String form(int workflowId){
		try {
			//获得workflow对应的表单定义的数据
			FlowForm form = formManager.findForm(workflowId);
			if(form == null){
				return null;
			}
			
			Template template = cfg.getTemplate(form.getTemplate());
			
			Map root = new HashMap();
			root.put("form", form);
			
			//最终的输出的位置
			Writer out = new StringWriter();
			
			template.process(root, out);
			
			return out.toString();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}

	public void setFormManager(FormManager formManager) {
		DynaFormFunction.formManager = formManager;
	}
}



Java代码 复制代码
  1. <%@?page?language="java"?contentType="text/html;?charset=GB18030"??
  2. ????pageEncoding="GB18030"%> ??
  3. <%@include?file="/common/common.jsp"?%> ??
  4. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> ??
  5. <html> ??
  6. <head> ??
  7. <meta?http-equiv="Content-Type"?content="text/html;?charset=GB18030"> ??
  8. <link?href="style/oa.css"?rel="stylesheet"?type="text/css"> ??
  9. <script?language="javascript"?src="script/public.js"></script> ??
  10. <title>添加公文信息</title> ??
  11. </head> ??
  12. <body> ??
  13. <center> ??
  14. <form?action="document.do"?method="post"?enctype="multipart/form-data"> ??
  15. <TABLE?class="tableEdit"?border="0"?cellspacing="1"?cellpadding="0"?style="width:580px;"> ??
  16. ????<TBODY> ??
  17. ????????<TR> ??
  18. ????????????<!--?这里是添加、编辑界面的标题?--> ??
  19. ????????????<td?align="center"?class="tdEditTitle"> ??
  20. ????????????您要创建的公文 ??
  21. ????????????</TD> ??
  22. ????????</TR> ??
  23. ????????<TR> ??
  24. ????????????<td> ??
  25. ????????????<!--?主输入域开始?--> ??
  26. ??
  27. <input?type="hidden"?name="method"?value="add"> ??
  28. <input?type="hidden"?name="workflowId"?value="${documentForm.workflowId}"> ??
  29. <table?class="tableEdit"?style="width:580px;"?cellspacing="0"?border="0"?cellpadding="0"> ??
  30. ????<tr> ??
  31. ????????<td?class="tdEditLabel"?>公文名称</td>?????????? ??
  32. ????????<td?class="tdEditContent"><input?type="text"?name="title"> ??
  33. ????????</td> ??
  34. ????????<td?class="tdEditLabel"?>公文描述</td>?????????? ??
  35. ????????<td?class="tdEditContent"><input?type="text"?name="description"></td> ??
  36. ????</tr> ??
  37. ????<tr> ??
  38. ????????<td?class="tdEditLabel"?>公文附件</td>?????????? ??
  39. ????????<td?class="tdEditContent"><input?type="file"?name="contentFile"> ??
  40. ????????</td> ??
  41. ????????<td?class="tdEditLabel"?></td>?????????? ??
  42. ????????<td?class="tdEditContent"></td> ??
  43. ????</tr> ??
  44. </table> ??
  45. ${my:form(documentForm.workflowId)} ??
  46. ????????????<!--?主输入域结束?--> ??
  47. ????????????</td> ??
  48. ????????</TR> ??
  49. ????</TBODY> ??
  50. </TABLE> ??
  51. ??
  52. <TABLE> ??
  53. ????????<TR?align="center"> ??
  54. ????????????<TD?colspan="3"?bgcolor="#EFF3F7"> ??
  55. ????????????<input?type="submit"?name="saveButton"??
  56. ????????????????class="MyButton"?value="保存公文信息">? ??
  57. ????????????<input?type="button"?class="MyButton"??
  58. ????????????????value="关闭窗口"?onclick="window.close()"> ??
  59. ????????????</TD> ??
  60. ????????</TR> ??
  61. </TABLE> ??
  62. </form> ??
  63. </center> ??
  64. </body> ??
  65. </html>??
  相关解决方案