动态表单自定义(回钦波)
结合Freemarker,将动态表单显示在公文的添加界面上
只需拷贝freemarker.jar包到类路径即可
1、了解Freemarker的基本使用(参考freemarker项目中的演示代码)
2、结合Freemarker动态显示表单
- DynaFormFunction.java
- WebRoot/document/add_input.jsp(使用自定义JSTL函数)
Java代码
packagecom.bjsxt.oa.web;
importjava.io.IOException;
importjava.io.StringWriter;
importjava.io.Writer;
importjava.util.HashMap;
importjava.util.Map;
importcom.bjsxt.oa.manager.FormManager;
importcom.bjsxt.oa.model.FlowForm;
importfreemarker.cache.ClassTemplateLoader;
importfreemarker.template.Configuration;
importfreemarker.template.Template;
importfreemarker.template.TemplateExceptionHandler;
publicclassDynaFormFunction {
privatestaticFormManager formManager;
privatestaticConfiguration cfg =newConfiguration();
static{
//定义模板文件应该从哪里加载,这是定义由DynaFormFunction类所在的路径下面的templates目录加载
cfg.setTemplateLoader(newClassTemplateLoader(DynaFormFunction.class,"templates"));
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
}
publicstaticString form(intworkflowId){
try{
//获得workflow对应的表单定义的数据
FlowForm form = formManager.findForm(workflowId);
if(form ==null){
returnnull;
}
Template template = cfg.getTemplate(form.getTemplate());
Map root =newHashMap();
root.put("form", form);
//最终的输出的位置
Writer out =newStringWriter();
template.process(root, out);
returnout.toString();
}catch(Exception e) {
e.printStackTrace();
}
returnnull;
}
publicvoidsetFormManager(FormManager formManager) {
DynaFormFunction.formManager = formManager;
}
}
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代码
pageEncoding="GB18030"%>
html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
添加公文信息您要创建的公文
公文名称
公文描述
公文附件
${my:form(documentForm.workflowId)}
class="MyButton"value="保存公文信息"> value="关闭窗口"οnclick="window.close()"> |