velocity简单配置
jar包 velocity-1.7.jar,velocity-tools-2.0.jar
<servlet> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.xml</param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>velocity</servlet-name> <!-- 一般采用vm格式作为velocity的标准格式 那样需要Eclipse安装Veloeclipse插件 --> <url-pattern>*.html</url-pattern> </servlet-mapping>
模板包含
可以通过修改velocity.properties文件中的该配置来指定模板文件位置,注意路径问题。
除此还可以通过#parse指令来对html文件进行包含,例如#parse("/views/common/page.html")
分页处理
pageBean:
package com.test; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; public class PageBean implements Serializable { private static final long serialVersionUID = -303675966023156812L; private int dataSum = 0; // 数据总个数 private int pageSum = 0; // 页面总个数 private int pageSize = 10; // 单页面的数据个数 private int pageNumber = 1; // 当前页号 private int customPageSize = 0; // 自定义 单页面的数据个数 public PageBean(){} public PageBean(int p_pageSize) { this.pageSize = p_pageSize; } public PageBean(int pageNumber,int customPageSize) { this.pageNumber = pageNumber; this.customPageSize = customPageSize; } /** * GETTER 数据总个数 * @return int */ public int getDataSum() { return dataSum; } /** * GETTER 页面总个数 * @return int */ public int getPageSum() { return pageSum; } /** * GETTER 单页面的数据个数 * @return int */ public int getPageSize() { return this.customPageSize == 0 ? this.pageSize : this.customPageSize; } /** * GETTER 当前页号 * @return int */ public int getPageNumber() { return pageNumber <=0 ? 1 : pageNumber; } /** * 查询数据库时,需要的结果集 在 满足SQL查询条件的结果集 中的起始位置。 * @return int */ public int getFirstResult() { return( this.getPageSize() * ( ( this.getPageNumber() == 0 ? 1 : this.getPageNumber() ) - 1 ) ); } /** * 在查询数据库时,需要的结果集的行数。 * @return int */ public int getMaxResults() { return this.getPageSize(); } /** * 前一页的页号 * @return int */ public int getPreviousNumber() { return this.pageNumber <= 1 ? 1 : this.pageNumber - 1; } /** * 后一页的页号 * @return int */ public int getNextNumber() { return this.pageNumber >= this.pageSum ? this.pageSum : this.pageNumber + 1; } /** * 当前页面第一条记录在整个结果集中的位置 * @return int */ public int getFirstNumber() { return this.getFirstResult() == 0 ? 1 : this.getFirstResult() + 1; } /** * 当前页面最后一条记录在整个结果集中的位置 * @return int */ public int getLastNumber() { return this.getFirstNumber() + this.getPageSize() - 1 > this.dataSum ? this.dataSum : this.getFirstNumber() + this.getPageSize() - 1; } /** * SETTER 数据总个数 * @param p_dataSum int */ public void setDataSum( int p_dataSum ) { this.dataSum = p_dataSum; this.computeAttributes(); } /** * SETTER 单页面的数据个数 * @param p_pageSize int */ public void setPageSize( int p_pageSize ) { this.pageSize = p_pageSize; } /** * SETTER 当前页号 * @param p_pageNumber int */ public void setPageNumber( int p_pageNumber ) { this.pageNumber = p_pageNumber; } public int getCustomPageSize() { return customPageSize; } public void setCustomPageSize(int customPageSize) { this.customPageSize = customPageSize; } /** * 是否禁用“首页” * @return boolean */ public boolean disabledFirstPage() { return this.pageSum == 0 || this.pageSum == 1 || this.pageNumber == 0 || this.pageNumber == 1; } /** * 是否禁用“上一页” * @return boolean */ public boolean disabledPreviousPage() { return this.pageSum == 0 || this.pageSum == 1 || this.pageNumber == 0 || this.pageNumber == 1; } /** * 是否禁用“下一页” * @return boolean */ public boolean disabledNextPage() { return this.pageSum == 0 || this.pageSum == 1 || this.pageNumber == this.pageSum; } /** * 是否禁用“末页” * @return boolean */ public boolean disabledLastPage() { return this.pageSum == 0 || this.pageSum == 1 || this.pageNumber == this.pageSum; } /** * 是否禁用“GO” * @return boolean */ public boolean disabledTurnTo() { return this.pageSum == 0 || this.pageSum == 1; } /** * 重新计算各个属性值 */ public void computeAttributes() { // 单页面的数据个数 this.pageSize = this.pageSize <= 0 ? 1 : this.pageSize; // 数据总个数 this.dataSum = this.dataSum < 0 ? 0 : this.dataSum; // 页面总个数 if(this.dataSum == 0) { this.pageSum = 0; } else { int iResidualNum = this.dataSum % this.getPageSize(); int iDivision = this.dataSum / this.getPageSize(); this.pageSum = iDivision == 0 ? 1 : iDivision + (iResidualNum == 0 ? 0 : 1); } // 当前页号 this.pageNumber = this.pageNumber <= 0 ? 1 : (this.pageNumber > this.pageSum ? this.pageSum : this.pageNumber); } public void reset(int pageSize) { this.dataSum = 0; // 数据总个数 this.pageSum = 0; // 页面总个数 this.pageSize = pageSize; // 单页面的数据个数 this.pageNumber = 1; // 当前页号 this.customPageSize = 0; // 当前页号 } /** * toString * @return String */ public String toString() { return ToStringBuilder.reflectionToString( this, ToStringStyle.DEFAULT_STYLE ); } }
宏命令
#macro(page $pageBean) ##设置按钮颜色 #set($linkStyle="style=cursor:pointer;color:blue;text-decoration:none;") ##设置点击事件 #set($changePage="document.getElementById('_changePage').click();") ##设置数据量 #set($dataSum=$pageBean.getDataSum()) #set($disabledFirstPage=$pageBean.disabledFirstPage()) #set($disabledPreviousPage=$pageBean.disabledPreviousPage()) #set($disabledNextPage=$pageBean.disabledNextPage()) #set($disabledLastPage=$pageBean.disabledLastPage()) #set($pageSize=$pageBean.getPageSize()) #set($disabledTurnTo=$pageBean.disabledTurnTo()) #set($pageSum = $pageBean.getPageSum()) #set($pageNumber=$pageBean.getPageNumber()) ##当出现0数据或者pageBean是null时 显示无数据 #if($dataSum == 0 || !$pageBean) <center style="text-color:#777777">无数据</center> #else ##提交动作 <input type="submit" style="display:none" id="_changePage" autocomplete="off" > 共 $dataSum 条记录 ##判断是否是第一页 #if($disabledFirstPage) <a class="pagePre">首页</a> #else <a href="javascript:void(0)" class="pagePre" onclick="document.getElementById('pageNumber').value='1';$changePage">首页</a> #end ##判断是否有上一页 #if($disabledPreviousPage) <a>上一页</a> #else <a href="javascript:void(0)" onclick="document.getElementById('pageNumber').value=$pageBean.getPreviousNumber(); $changePage">上一页</a> #end ##判断是否有下一页 #if($disabledNextPage) <a>下一页</a> #else <a href="javascript:void(0)" onclick="document.getElementById('pageNumber').value = $pageBean.getNextNumber(); $changePage" >下一页</a> #end ##是否有最后一页 #if($disabledLastPage) <a class="pagePre">末页</a> #else <a href="javascript:void(0)" class="pagePre" onclick="document.getElementById('pageNumber').value=$pageSum; $changePage" >末页</a> #end ##添加事件 每页<select name="customPageSize" onchange="$changePage"> ##每页显示多少页 #set($arr=[10,20,30,40,50,60,70,80,90,100]) #foreach($foo in $arr) <option value=$foo #if($foo == $pageSize) selected='selected' #end> $foo </option> #end </select>条 转到 #if(!$disabledTurnTo) ## <input type="hidden" id="pageNumber" name="pageNumber" value=$pageNumber /> #set($selectOnChange="document.getElementById('pageNumber').value=this.value;$changePage") <select onchange=$selectOnChange > #set($nums = [1..$pageSum]) #foreach($ps in $nums) <option value=$ps #if($ps == $pageNumber) selected='selected' #end > $ps </option> #end </select> 页 #else <input type="text" size="1" readonly id="pageNumber" name="pageNumber" value=$pageNumber /> #end 共 $pageSum 页 #end #end
在起他页面进行调用:
<div class="row-fluid"> #parse("/views/common/page.html") #set($pb=$!request.getAttribute("pageBean")) #page($pb) </div>
效果: