`
zhaoyanfangeye
  • 浏览: 124847 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Freemarker和Struts2做动态表单

阅读更多
   由于项目中需要用到一个可定制的动态表单功能,管理员可以根据需要定制定出想要的表单,参考了一些视频和网上资料,自己做了一个动态电子表单模块。
     //FreemarkerManage 的初始配置
    public class FreemarkerManage {

	private static String ENCODING="UTF-8";
	private static Configuration cfg=new Configuration();
	static{
		//定义模板的位置
		cfg.setTemplateLoader(new ClassTemplateLoader(FreemarkerManage.class,"templates"));
		cfg.setObjectWrapper(new DefaultObjectWrapper());
		//设置异常
		cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
		cfg.setEncoding(Locale.CHINA, ENCODING);
	}
	public static Configuration getConfiguration(){
		return cfg;
	}

}


@Component
public class DynaFormFunction {
	private static String defaultTemplate = "document_form.ftl";
	private static String showTemplate = "showform.ftl";
	private static String initForm = "initForm.ftl";
	private static FlowFormManageService flowFormManageService;
	private static FormInstanceWebService formInstanceWebService;
	private static ReportJobWebService reportJobWebService;
	/***
	 * 初始化表单信息,将数据放到模板中
	 * @param workflowId
	 * @return
	 */
	public static String form(long workflowId) {
        FlowForm flowForm = flowFormManageService.findFlowFormById(workflowId);
		if (null == flowForm) {
			return null;
		}
		/**
		 * 加载freemarker的配置
		 */
	Configuration configuration = FreemarkerManage.getConfiguration();
		try {
			/**
			 * 加载表单模板文件
			 */
		Template template = configuration.getTemplate(document_form);
		Writer writer = new StringWriter();
		Map root = new HashMap();
		root.put("form", flowForm);
			/**
			 * 将模板与数据进行相结合
			 */
			template.process(root, writer);
			return writer.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 显示动态表单的值
	 * @param formInstanceId
	 * @return
	 */
	public static String showForm(long formInstanceId) {
           try {
	FormInstanceDTO formInstanceDTO = formInstanceWebService
					.findFormInstanceById(formInstanceId);
			if (null == formInstanceDTO) {
				return null;
			}
			/**
			 * 加载freemarker的配置
			 */
	Configuration configuration = FreemarkerManage.getConfiguration();
			/**
			 * 获取动态表单的实例数据
			 */
	Map<Long, Object> dataInstance = formInstanceDTO.getInstanceData();
	Map<String, Object> newDataInstance = reportJobWebService
					.findFlowFormData(dataInstance);
			/**
			 * 根据配置加载模板
			 */
	Template template = configuration.getTemplate(showTemplate);
			Writer writer = new StringWriter();
			Map root = new HashMap();
			root.put("showForm", newDataInstance);
			/**
			 * 将模板与数据进行结合
			 */
			template.process(root, writer);
			return writer.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
        }
}
模板文件的编写
(1).initForm.ftl的编写
<table>
	<#assign i=0>
	<#assign dataValue="">
	<#list form.formFields as field>
		<#assign i=i+1>
		<#if field_index % 2 = 0>
			<tr>
				</#if>
					<td colspan="2" valign="top">
						<span class="form-field"><span class="important-field-star">*</span>${field.fieldLable}:</span>
						<#include "${field.input.key}">
					</td>
				<#if i=2 || !field_has_next >
					<#assign i=0>
			</tr>
		</#if>
	</#list>
</table>

/****
*自定义一个tld文件放在WEB-INF下,文件名称叫my.tld
*/
<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
    
  <tlib-version>1.0</tlib-version>
  <short-name>my</short-name>
  <uri>http://www.gosophia.com/oa/functions</uri>
  <function>
    <name>form</name>
    <function-class>com.gosophia.reportData.action.DynaFormFunction</function-class>
    <function-signature>java.lang.String form(long)</function-signature>
  </function>
  <function>
     <name>showForm</name>
    <function-class>com.gosophia.reportData.action.DynaFormFunction</function-class>
    <function-signature>java.lang.String showForm(long)</function-signature>
  </function>
</taglib>
/**
**在web.xml文件进行配置
*/
	<jsp-config>
		<taglib>
		<taglib-uri>http://www.gosophia.com/myfunctions</taglib-uri>
		<taglib-location>/WEB-INF/my.tld</taglib-location>
		</taglib>
	</jsp-config>

在jsp页面显示,并且引进tld文件
 /**
  *
  *初始化电子表单页面
  */
//先在jsp页面引进自己的标签
<%@taglib prefix="my" uri="http://www.gosophia.com/oa/functions"%>
//在jsp直接引入就可以
   ${my:form(flowForm.formId)}

  /**
   *动态显示电子表单内容
   *
   */
//先在jsp页面引进自己的标签
<%@taglib prefix="my" uri="http://www.gosophia.com/oa/functions"%>
//显示动态表单中数据
${my:showForm(approvalReportJobDto.reportJobDto.formInstanceId)}

    由于这个模块是在整个项目当中的,没能提供出相应的源代码。由于时间原因自己没能做出一个例子。
    上面的模板文件没有定义全,如果想要真正使用的话,还的定义出其他模板文件。
    如图:
    如果上面有不对的或不清楚的地方,请大家留言,或加我msn通知我      zhaoyanfangmsn@hotmail.com
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    freemarker+struts完整代码实例

    初学者可以通过此实例了解如何将FreeMarker与Struts结合,实现动态页面的生成和控制层的处理。 首先,让我们详细了解FreeMarker。FreeMarker的工作原理是,它接收来自服务器的数据,然后根据预先定义的模板文件生成...

    Struts2 和freemarker实例

    Struts2提供了丰富的特性,如拦截器、插件架构、灵活的数据绑定以及强大的表单验证功能,使得开发者能够更高效地组织和管理应用程序的业务逻辑。 FreeMarker则是一个模板引擎,它允许开发者使用模板语言来分离应用...

    Struts2表单数据获取项目

    在这个名为"Struts2表单数据获取项目"的资源中,我们将深入探讨如何使用Struts2框架来处理表单提交的数据。 首先,我们来看看核心组件`Struts.xml`。这是Struts2应用的主要配置文件,用于定义动作(Actions)、结果...

    struts2+freemarker学习案例

    Struts2和FreeMarker是Java Web开发中两个重要的框架,它们常常被一起使用来构建动态、数据驱动的Web应用程序。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于简化Java Servlets和JSP的...

    struts1和struts2的区别

    - **Struts2**: 直接使用Action来处理表单数据,不再需要专门的ActionForm。Action可以是一个普通的Java对象,并且可以通过标签库直接访问其属性。此外,Struts2还支持ModelDriven模式,允许使用模型对象来代替...

    freemarker初探 附 freemarker中文手册 与 struts2 checkboxlist的研究

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,与Struts2等MVC框架结合使用。在本篇文章中,我们将探讨Freemarker的基础知识,并结合Struts2中的checkboxlist进行研究。 首先,让我们理解...

    Struts2 做的留言板

    总的来说,这个"Struts2 做的留言板"项目是一个很好的学习资源,涵盖了Struts2框架的基本使用和核心概念,对于理解和实践MVC模式以及提升Java web开发技能非常有帮助。通过分析和实践这个项目,你可以深入了解Struts...

    struts2jar包

    6. **其他依赖的jar包**:Struts2运行还需要一些其他的库,如freemarker或velocity用于模板引擎,javassist用于动态类生成,log4j或slf4j用于日志记录等。 引入Struts2的jar包有多种方式: - **Eclipse/IDEA等集成...

    Struts2框架及注释和用法

    Struts2支持多种结果类型,如dispatcher(默认,转发到JSP),redirect(重定向到URL),freemarker(使用FreeMarker模板引擎渲染)等。 **9. 国际化和主题** Struts2支持多语言环境,通过资源文件(如message....

    struts2 使用范例

    在JSP中,我们可以使用Struts2的标签库,如`s:form`、`s:textfield`等,来创建动态的表单和显示数据。同时,通过OGNL(Object-Graph Navigation Language)表达式,我们可以方便地在视图中访问模型层的数据。 在...

    留言板留言板struts2留言板struts2

    5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。通过OGNL,可以在JSP页面中直接访问Action中的属性,或者在Action中动态设置模型数据。 6. ...

    struts2-showcase.rar

    2. **表单验证**:展示了基于Struts2的FieldAware和Validator插件的表单验证机制。 3. **拦截器的使用**:包括预处理和后处理,如LoggingInterceptor、ValidationInterceptor等。 4. **OGNL表达式**:在JSP页面中...

    struts结合js的表单验证

    Struts2 是一个基于 Java 的企业级应用框架,它支持多种技术栈,包括但不限于 JSP、FreeMarker 和 Velocity。Struts2 提供了一种灵活的方式来构建和管理 Web 应用程序。而 JavaScript 则是 Web 前端开发的重要组成...

    struts2 freemarker hibernate spring 整合框架

    Struts2、Freemarker、Hibernate和Spring是Java开发中常用的四大开源框架,它们的整合应用可以构建出高效、灵活的企业级Web应用。这个压缩包文件的标题表明它包含了一个整合了这四个框架的示例项目,主要是实现登录...

    使用struts2写的小项目

    Struts2是一个强大的Java web应用程序框架,用于构建和...总的来说,"使用struts2写的小项目"是一个实际应用Struts2框架的实例,通过学习和分析该项目,开发者可以深入理解Struts2的工作原理,提升Web应用开发能力。

    struts1和struts2的区别(详细)

    Struts2使用拦截器机制来处理HTTP请求,因此Action只需要关注业务逻辑部分。这也使得Struts2的Action更易于测试和维护。 #### 三、表单验证机制的不同 - **Struts1**: Struts1提供了基于ActionForm的验证机制,即...

    struts2小程序 struts2代码

    2. **配置文件**:Struts2使用XML配置文件(struts.xml或struts.properties)来定义Action、结果类型、拦截器等。这些配置是理解程序工作流程的关键。 3. **Interceptor拦截器**:拦截器允许在Action执行前后插入...

    struts1.2+freeMarker

    - 创建FreeMarker模板文件,如`index.ftl`,使用FreeMarker语法定义页面结构和动态内容。 - 编写Struts Action类,处理业务逻辑,并将结果数据放入模型对象。 - 在struts-config.xml配置文件中添加Action配置,...

    struts1+spring+hibernate+freemarker一个小例子

    Struts1、Spring和Hibernate是Java Web开发中的三个...随着经验的积累,开发者可以逐步添加更多的功能和优化,比如引入Spring Security进行权限管理,或者使用Spring MVC替换Struts1以利用其更现代的特性和性能优势。

    尚硅谷_佟刚_Struts2

    5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。 6. **拦截器**:拦截器是Struts2的核心组件,用于处理请求、验证输入、事务管理、日志...

Global site tag (gtag.js) - Google Analytics