一直不懂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宏。
相关推荐
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......
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`...
例如,你可以直接在实体类上使用`@Entity`、`@Table`等注解,而不是通过`AnnotationConfiguration`创建SessionFactory。 总的来说,SSH整合需要配置多个组件,包括数据库连接、持久层(Hibernate)、服务层(Spring...
- 创建实体类,定义映射文件或使用注解方式。 **Spring配置文件示例**(`application-context.xml`): ```xml <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close...
1. 创建实体类:每个实体类对应数据库中的一个表,使用`@Entity`注解标识,并通过`@Table`指定表名,属性上使用`@Id`、`@GeneratedValue`等注解定义主键。 2. 映射文件或注解:使用`@OneToMany`, `@ManyToOne`, `@...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
<p th:text="${collect.description}">description</p> ``` - **说明**:此例中,元素 `<p>` 内的文本会被 `${collect.description}` 的值所替换。 ##### 3. `th:utext` - **功能介绍**:与 `th:text` 类似,但...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...