`

freemarker @p.table定义方式

 
阅读更多
一直不懂jeecms中<@p.table><@p.column/></@p.table>等标签是在哪个地方配置的,项目现在需要扩展@p.table标签的功能,在网上找了一天后终于找到了,并对freemarker有了大致的了解理。

1.由于项目是在jeecms中做的二次开发,第一步是去jeecms中下载源码查看配置。 

web.xml

 后台管理配置:

<servlet>
	<servlet-name>JeeCmsAdmin</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/config/jeecms-servlet-admin.xml
			/WEB-INF/config/plug/**/*-servlet-admin-action.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

2.进而查看jeecms-servlet-admin.xml

 

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<property name="templateLoaderPath" value="/WEB-INF"/>
	<property name="freemarkerVariables">
		<map>
			<!--在FCK编辑器中需要用到appBase,以确定connector路径。-->
			<entry key="appBase" value="/jeeadmin/jeecms"/>
			<!--后台管理权限控制-->
			<entry key="cms_perm" value-ref="cms_perm"/>
			<entry key="text_cut" value-ref="text_cut"/>
			<entry key="html_cut" value-ref="html_cut"/>
			<entry key="cms_content_list" value-ref="cms_content_list"/>
			<entry key="cms_content_page" value-ref="cms_content_page"/>
		</map>
	</property>
	<property name="freemarkerSettings">
		<props>
			<prop key="template_update_delay">0</prop>
			<prop key="defaultEncoding">UTF-8</prop>
			<prop key="url_escaping_charset">UTF-8</prop>
			<prop key="locale">zh_CN</prop>
			<prop key="boolean_format">true,false</prop>
			<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
			<prop key="date_format">yyyy-MM-dd</prop>
			<prop key="time_format">HH:mm:ss</prop>
			<prop key="number_format">0.######</prop>
			<prop key="whitespace_stripping">true</prop>
			<prop key="auto_import">/ftl/jeecms/index.ftl as p,/ftl/spring.ftl as s</prop>
		</props>
	</property>
</bean>

 3.打开/ftl/jeecms/index.ftl:

<#ftl strip_whitespace=true>

<#include "ui/index.ftl"/>

<#include "operate_right.ftl"/>

 很明显此文件嵌入了两个ftl文件。

4.继续查看ui/index.ftl

<#include "text.ftl"/>
<#include "select.ftl"/>
<#include "radio.ftl"/>
<#include "checkbox.ftl"/>
<#include "checkboxlist.ftl"/>
<#include "textarea.ftl"/>
<#include "hidden.ftl"/>
<#include "file.ftl"/>
<#include "tree.ftl"/>
<#include "table.ftl"/>
<#include "table-column.ftl"/>
<#include "button.ftl"/>
<#include "password.ftl"/>
<#include "editor.ftl"/>
<#include "form.ftl"/>
<#include "td.ftl"/>
<#include "tr.ftl"/>

<#include "self_define_widget.ftl"/>
<#include "self_define_register_widget.ftl"/>

 看到了table.ftl 模板文件.

6.打开table.ftl:

<#--                                                      
表格标签:用于显示列表数据。                              
	value:列表数据,可以是Pagination也可以是List。    
	class:table的class样式。默认"pn-ltable"。         
	sytle:table的style样式。默认""。                  
	width:表格的宽度。默认100%。                      
-->                                                        
<#macro table value listAction="v_list.do" class="pn-ltable" style="" theadClass="pn-lthead" tbodyClass="pn-ltbody" width="100%" cellspacing="1">     
<table class="${class}" style="${style}" width="${width}" cellspacing="${cellspacing}" cellpadding="0" border="0">                                    
 <#if value?is_sequence><#local pageList=value/><#else><#local pageList=value.list/></#if>                            
<#list pageList as row>                                    
<#if row_index==0>                                          
<#assign i=-1/>                                            
<thead class="${theadClass}"><tr><#nested row,i,true/></tr></thead>  
</#if>                                                     
<#assign i=row_index has_next=row_has_next/>               
<#if row_index==0><tbody  class="${tbodyClass}"><tr ><#else><tr ></#if><#nested row,row_index,row_has_next/>                                          
<#if !row_has_next>                                        
</tr></tbody>                                              
<#else>                                                    
</tr>                                                      
</#if>                                                     
</#list>                                                  
</table>                                                  

 找到了定义的table宏。

 

 

 

 

 

分享到:
评论

相关推荐

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;......

    spring-boot-mybatis-plus数据层框架

    java -jar mp-generator.jar -t freemarker -o D:\output -c com.example.demo -t User -d mysql -u jdbc:mysql://localhost:3306/testdb -n root -p 123456 ``` 其中`-t`指定模板类型,`-o`指定输出目录,`-c`...

    ssh(struts2.2.1+_hibernate3.6+spring3.0.5)整合配置

    例如,你可以直接在实体类上使用`@Entity`、`@Table`等注解,而不是通过`AnnotationConfiguration`创建SessionFactory。 总的来说,SSH整合需要配置多个组件,包括数据库连接、持久层(Hibernate)、服务层(Spring...

    搭建ssh2框架的步骤

    - 创建实体类,定义映射文件或使用注解方式。 **Spring配置文件示例**(`application-context.xml`): ```xml &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close...

    springmvc整合hibernate4

    1. 创建实体类:每个实体类对应数据库中的一个表,使用`@Entity`注解标识,并通过`@Table`指定表名,属性上使用`@Id`、`@GeneratedValue`等注解定义主键。 2. 映射文件或注解:使用`@OneToMany`, `@ManyToOne`, `@...

    java开源包101

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    thymeleafth常用标签

    &lt;p th:text="${collect.description}"&gt;description&lt;/p&gt; ``` - **说明**:此例中,元素 `&lt;p&gt;` 内的文本会被 `${collect.description}` 的值所替换。 ##### 3. `th:utext` - **功能介绍**:与 `th:text` 类似,但...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包8

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包7

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包9

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Java资源包01

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics