大连市中考满分作文-struts2自定义标签实现翻页查询
struts2标签使用实例
Struts2中数据标签使用示例S truts2提供了大量丰富的标签供使用,它不再像S truts1中一样,将种类标签进行分门列别,但可以根据其使用的用途用以区别。
本文通过对S truts2中数据标签的学习,来对S truts2中标签的学习起到一个抛砖引玉的作用。
文中将介绍Action标签、Bean标签、Data标签、Include标签、P aram标签、Set标签、T ext标签、P roperty 标签等标签。
代码下载:/y1ps2Mjpc3NiLKuetMOpCsZOOypD6KSdo8-46Zy2wpoMcABeo4vOC NJXtWDEO93-TXgZogwAF YxSOni5BEG2EoN65OFwHdG71v-/St ruts2DataTags.rar?download一、<s:action>标签Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以指向具体指定某一命名空间中的某一Action。
而标签的主体用于显示及渲染Actionr的处理结果。
1.WebRoot\pages\dataTagssuccess.jsp处理页面<%@ page contentType="text/htm l; charset=GBK" %><%@ taglib prefix="s" uri="/struts-tags" %><ht m l><head><title>Action Tag 示例</title></head><body><h2>Action Tag 示例</h2><s:action nam e="success"><b><i>s:action标签用于在页面显示结果.</i></b></div></s:action></body></html>这里使用<s:action>标签进行页面跳转,并用于显示处理的结果。
Struts2--result页面跳转forward--get方式和post方式的获取参数
Struts2--result页⾯跳转forward--get⽅式和post⽅式的获取参数⼀.总体概述这篇⽂章是写基于struts2(整合了ssh)的2个页⾯之间的跳转传参。
突然这天想到,struts2的result有很多的type类型(跳转,重定向,。
),于是就回忆起,跳转和重定向的不同(跳转地址栏不变,共享参数;重定向地址栏改变,不再共享参数)。
⼼⾥好奇,struts2⾥页⾯跳转的时候,get的⽅式提交时怎么再第⼆个页⾯获取参数的,post是怎么在第⼆个页⾯获取参数的。
重定向⼜是怎么样的呢?真的抱歉,我今天花了⼀天时间,只弄清楚了页⾯跳转,关于页⾯重定向传参明天再搞。
本来这篇博客都没有的,因为我写了⼀半了,把get⽅式的写好了,搞post⽅式的时候太久了。
回到这个页⾯不⼩⼼把前⾯的写的删了,写了新的话,⼀瞬间反应过来,晚了,⾃动保存了。
时间宝贵者,可以直接看正⽂的第2部分⼆.正⽂1.get⽅式提交,页⾯跳转后,在后者页⾯获取参数。
(1)先是在start.hml页⾯,⽤get⽅式提交数据(username,password)到ForwardAction,然后这个action返回SUCCESS(execute⽅法⾥没有处理任何东西,只是返回SUCCESS),然后根据定义的result(name为success)采⽤type=dispatcher(即页⾯跳转)的⽅式,跳转到后者页⾯end.html。
在end.html很简单就能取到start.html页⾯上传的参数,因为页⾯跳转地址栏没变化,⽽且get⽅式还是显⽰上传参数和值的,这样我们只要⽤js去解析地址栏,获取其中的上传参数就⾏了。
思路说道这⾥很多⼈应该就懂了,其实get⽅式的提交就变成了怎么⽤js去解析地址栏获取上传参数。
由于之前写的不⼩⼼覆盖了,现在也很晚了,这个也简单,没办法明天有时间补上来。
(2)代码:①:start.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="forget" method="get"><table style="width:300px;height:150px;border:1px solid red;"><tr><td>username:</td><td><input name="username"></td></tr><tr><td>password:</td><td><input name="password"></td></tr><tr><td colspan="2"><input type="submit" value="get⽅式跳转页⾯"></td></tr></table></form></body></html>②:ForwardActionpackage com.st.action;import java.util.HashMap;import java.util.Map;import com.opensymphony.xwork2.ActionSupport;import net.sf.json.JSONObject;public class ForwardAction extends ActionSupport {private String username;//上传参数:usernameprivate String password;//上传参数:passwordpublic String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}//下⾯这个⽅法是处理start提交的请求的,其实没有处理任何事,因为它的业务只是要跳转到end页⾯public String execute(){System.out.println("I have entered execute");return SUCCESS;}}③struts.xml<!-- 对应的就是ForwardAction,bean的实例化是交由spring管理的 --><package name="mytest" extends="struts-default"><action name="forget" class="forwardaction" method="execute"><result name="success">end.html</result></action></package>④end.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script src="js/jquery-3.1.1.js"></script></head><body><table style="width:400px;height:200px;border:1px solid red;"><tr><td>接收的参数username:</td><td><div id="username" style="color:red;"></div></td></tr><tr><td>接收的参数password:</td><td><div id="password" style="color:red;"></div></td></tr><tr><td><input type="submit" value="点我接收get⽅式跳转过来的参数" onclick="me()"></td></tr></table><script>//⽤正则表达式的⽅式从地址栏获取参数值function getQueryString(name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");var r=window.location.search.substring(1).match(reg);if(r!=null){return unescape(r[2]);}else{return null;}}//简单的调⽤上⾯的函数,并且显⽰下参数值function me(){$('#username').html(getQueryString('username'));$('#password').html(getQueryString('password'));}</script></body></html>(3)相关截图2.post⽅式提交,页⾯跳转后,在后者页⾯获取post⽅式上传的参数(1)概述:这个我也是觉得get⽅式能获取,post是地址栏看不见的,那该怎么获取呢,能获取吗?我去百度搜了,很多“不能”“不知道,没试过”“通过ajax”,但是说实话,说的很模糊。
使用FreeMarker的宏来实现Struts2的分页显示
使用FreeMarker的宏来实现Struts2的分页显示看到一些朋友在Struts2中,依然使用标签来实现分页显示,而在基于Struts2的开发中,可能很多朋友会采用FreeMarker模板来渲染表示层,那么对于采用FreeMarker进行渲染的页面来说,我在这里提出一种使用FreeMarker的宏来实现分页显示的作法,这种作法,我感觉更简单灵活。
貌似在网上也没找到类似的作法,所以,如果这种作法有什么隐患或性能问题,还请朋友们批评。
注:下面的代码只是示例性质的,难免有一些Bug或考虑不全之处存在,希望大家不必对代码本身过多要求,更多的是看一下这种作法是否可取。
首先,看一下使用方法。
在需要进行分页显示的文件中,引入分页显示的ftl库文件。
Xml代码1.<#import "*/common/pager.ftl" as pager>在需要显示分页列表的位置,加入以下代码,实现分页显示。
Java代码1.<@pager.p page=page totalpage=totalPage />其中,“p”是宏的名字;“page=page”中的第一个page是宏的参数,第二个page是来自Action对象中的属性(带有get/set方法的成员变量),page属性主要是标注当前要显示的页号,即第几页;同样的,“totalpage=totalPage”也是类似的,totalpage属性主要是告诉分页宏,总页数是多少。
经过上面两段代码,再配合在Action中取得要显示数据的总页数,就可以分页了。
接下来,我们看一下分面效果截图。
最后,我们看一下分页效果的处理文件“pager.ftl”中宏“p”是如何定义的。
Xml代码1.<#macro p page totalpage params=''maxsteps=6>2.<#assign ipage=page?number>3.<#if maxsteps <= 0>4.<#assign maxsteps=5>5.</#if>6.<#assign offset = ((ipage - 1) / maxsteps)?int>7.<#assign offsetLast = ((totalpage - 1) / maxsteps)?int>8.9.<#-- url附加参数的判断 -->10.<#assign requestParams = "">11.<#if (params?? && params != '')>12.<#assign requestParams = '&' + params>13.</#if>14.15.<#-- 首页 -->16.<#if ipage gt 1>17.<a href="?page=1${requestParams}"><<</a>18.<#else>20.</#if>21.<#-- 前组-->22.<#if offset gt 0>23.<a href="?page=${offset * maxsteps}${requestParams }">…</a>24.<#else>25.<span class="disabled">…</span>26.</#if>27.<#-- 当前组中的页号-->28.<#if (offset + 1) * maxsteps <totalpage>29.<#assign pagelist = (offset + 1) * maxsteps>30.<#else>31.<#assign pagelist = totalpage>32.</#if>33.<#if ipage gt 0 && ipage lte totalpage>34.<#list (offset * maxsteps + 1)..pagelist as num>35.<#if ipage != num>36.<a href="?page=${num}${requestParams}">${num}</ a>37.<#else>38.<strong>${num}</strong>39.</#if>40.</#list>41.</#if>42.<#-- 下组 -->43.<#if offset lt offsetLast>44.<a href="?page=${(offset + 1) * maxsteps + 1}${reque stParams}">…</a>45.<#else>47.</#if>48.<#-- 尾页 -->49.<#if ipage lt totalpage>50.<a href="?page=${totalpage}${requestParams}">>>< /a>51.<#else>52.<span class="disabled">>></span>53.</#if>54.<#-- 前一页 -->55.<#if ipage gt 1>56.<a href="?page=${ipage - 1}${requestParams}">前一页</a>57.<#else>58.<span class="disabled">前一页</span>59.</#if>60.<#-- 后一页 -->61.<#if ipage lt totalpage>62.<a href="?page=${ipage + 1}${requestParams}">后一页</a>63.<#else>64.<span class="disabled">后一页</span>65.</#if>66.</#macro>对另外两个参数特别说明一下。
js翻页效果的实现原理
js翻页效果的实现原理前言随着互联网的发展,翻页效果已经成为了网页设计中非常常见的一个特效。
而JavaScript语言在实现翻页效果中起到了非常重要的作用。
下面,我将为大家分步骤介绍实现翻页效果的JavaScript原理。
第一步:获取DOM元素在实现翻页效果之前,首先需要获取到需要进行翻页的DOM元素。
通常情况下,我们可以通过getElementById或者getElementsByClassName等方法获取到元素。
例如:```var pageList = document.getElementById('page-list');```上面的代码就可以获取到一个ID为page-list的DOM元素。
这个DOM有可能是一个ul或者一个div,它就是我们需要进行翻页的元素。
第二步:获取元素宽度为了实现页面翻页效果,我们需要知道每一页的宽度。
因此,我们需要获取到元素的宽度。
通常情况下,我们使用offsetWidth属性可以获取到一个元素的宽度。
```var pageWidth = pageList.offsetWidth;```上面的代码可以获取到我们需要进行翻页的元素的宽度。
第三步:设置每页宽度拿到元素宽度之后,我们需要将元素的宽度设置为每一页的宽度。
通过设置每一页的宽度,我们可以计算出我们需要翻页的页数。
```var pageSize = pageWidth/window.innerWidth;pageList.style.width = pageSize*100 + '%';```上面的代码可以将一个横向滚动的列表设置为每一页一个屏幕宽度。
第四步:翻页效果实现为了实现翻页效果,我们需要对DOM元素进行一些位移操作。
我们可以先获取到当前元素的位移值,然后再对它进行一定的操作。
例如:```var translateX = 0;function pageUp() {translateX -= window.innerWidth;pageList.style.transform = 'translateX(' + translateX + 'px)';}function pageDown() {translateX += window.innerWidth;pageList.style.transform = 'translateX(' + translateX + 'px)';}```上面的代码可以实现一个向左翻页和向右翻页功能。
struts的循环标签
struts的循环标签摘要:1.Struts 循环标签概述2.Struts 循环标签的分类3.Struts 循环标签的基本语法4.Struts 循环标签的实例分析5.Struts 循环标签的注意事项正文:【Struts 循环标签概述】Struts 是一款流行的Java Web 框架,它提供了丰富的标签库以简化Web 开发的流程。
在Struts 中,循环标签是一种常用的标签,它可以帮助开发者轻松实现循环操作。
Struts 循环标签可以让我们在页面中反复显示相同的内容,或者根据某个条件来生成一系列的输出。
【Struts 循环标签的分类】Struts 循环标签主要分为两类:`<s:iterator>`和`<s:for>`。
这两种标签都可以实现循环操作,但它们的应用场景和语法略有不同。
1.`<s:iterator>`标签`<s:iterator>`标签主要用于迭代集合,如数组、List 或Set 等。
它可以将集合中的元素逐一输出,或者对集合中的元素进行遍历和操作。
2.`<s:for>`标签`<s:for>`标签主要用于循环某个范围,可以在指定的范围内生成一系列数字或字符串。
这种标签通常用于迭代数字序列,例如生成页码、迭代表格行等。
【Struts 循环标签的基本语法】以下是Struts 循环标签的基本语法:1.`<s:iterator>`标签```xml<s:iterator value="expression" var="variable"><!-- 标签体内容--></s:iterator>```其中,`value`属性表示迭代集合的表达式,`variable`属性表示迭代变量。
2.`<s:for>`标签```xml<s:for value="expression" var="variable"><!-- 标签体内容--></s:for>```其中,`value`属性表示循环范围的表达式,`variable`属性表示循环变量。
彻底解决Struts 数据库查询结果 分页显示
}
public void setPrice(String price){
this.price=price;
boolean hasPreviousPage=false; //是否有前一页
ArrayList arrayList;
Iterator it;
public PageBean(){}
}
public static ArrayList getAllBook(Connection connection){
String sql="select * from book";
* @作者 李敏强
* Struts分页显示数据Bean,对应数据库中Book表
*/
public class Book {
private String bookname; //书名
private String author; //作者
ArrayList arrayList = new ArrayList();
try{
Statement statement =
connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
彻底解决Struts 数据库查询结果 分页显示
一 开发环境
Elicpse+Struts Studio+SqlServer2000+Tomcat。
二 开发思路
既然讲的是Struts,那自然离不了MVC,分页显示也是如此。
}
struts的循环标签 -回复
struts的循环标签-回复"struts的循环标签"主题的文章示例:标题:深入理解Struts框架的循环标签导引:Struts是一个用于开发Java Web应用程序的开源框架。
它提供了一套丰富的标签库,旨在简化开发人员的工作,并提高项目的效率和可维护性。
本文将详细介绍Struts的循环标签,包括如何使用和优化循环标签的技巧。
第一部分:了解Struts框架的循环标签在Struts框架中,循环标签是用于在JSP页面中迭代集合和数组的元素的一种特殊标签。
循环标签使开发人员能够更轻松地处理数据,以及创建和展示重复的HTML元素。
第二部分:循环标签的基本使用在使用Struts的循环标签之前,首先需要在JSP页面的头部导入相应的标签库。
然后,可以使用<c:forEach>标签来创建一个循环,迭代指定的集合或数组。
通过指定一个变量名称,可以在每次迭代时获取集合或数组中的元素。
第三部分:循环标签的高级用法除了基本用法之外,Struts的循环标签还提供了一些高级功能。
例如,可以使用<c:forEach>标签的"begin"和"end"属性来指定迭代的起始和结束位置。
此外,还可以使用"step"属性来指定每次迭代的步长。
第四部分:优化循环标签的技巧尽管Struts的循环标签非常方便,但在处理大量数据时可能会影响性能。
为了优化循环标签的使用,可以考虑采用以下技巧:1. 考虑将数据加载到缓存中,以减少数据库查询的次数。
2. 使用分页功能,将大数据集分批展示,以减轻页面加载和渲染的负担。
3. 避免在循环标签内部进行复杂的逻辑操作,以提高页面的响应速度。
结论:通过本文,我们了解了Struts的循环标签的基本用法和高级功能,以及优化循环标签的一些技巧。
使用循环标签可以帮助开发人员更高效地处理数据,并提高项目的可维护性和性能。
Struts2的动态方法,及result跳转方式,全局结果以及默认的action的配置
Struts2的动态⽅法,及result跳转⽅式,全局结果以及默认的action的配置Action动态⽅法的调⽤ ⾸先我们需要在struts.xml中去配置⼀个常量值如下那么去哪找呢?找到Struts-core.jar并打开method属性<action name="login" class="erAction" method="lgoin"><result name="success">/success.jsp</result><result name="fail">/fail.jsp</result></action><action name="register" class="erAction" method="register"><result name="success">/success.jsp</result><result name="fail">/fail.jsp</result></action> 可以看到配置⽂件中分别定义了两个action元素,每个action的name属性都不同,但是类的引⽤却是相同的也就是说,如果⽤户的请求是login.action,那么就会调⽤类中的login()⽅法,如果是register.action则会调⽤register()⽅法.注意:Struts2在根据action元素的method属性查找执⾏⽅法时有两种途径1. 查找与method属性值完全⼀致的⽅法2. 查找与doMethod()形式的⽅法如login()⽅法,找不到此⽅法时会去找doLogin()⽅法action中感叹号的使⽤ 使⽤语法:actionName!methodName因此请求只需要这样写即可如下⽽配置⽂件中就不在需要method属性了action中通配符的使⽤<!-- {1} 相当于占位符,在每个⽤到{1} 的地⽅都匹配了前端请求的*User中*号的内容 --><action name="*User" class="erAction" method="{1}"><result name="{1}">{1}.jsp</result></action>⽐如我的请求是 loginUser.action那么login就会被填充到 {1}中,也就是跳转页⾯是login.jsp,⽅法是login,结果是login 此外有了{1}那么也是可以有{2}的.这⾥就不多讲了result跳转⽅式的配置 常⽤的三种如下:1. dispatcher:Action默认的结果类型,采⽤转发的形式请求指定的视图资源,请求中的数据信息不会丢失.2. redirect:采⽤重定向的⽅式请求指定的视图资源.数据会丢失3. redirectAction:重定向的⽅式请求⼀个新的Action,数据会丢失<action name="register" class="erAction" method="register"><result name="success" type="redirectAction">success</result><result name="fail">/fail.jsp</result></action>如上成功之后会去中找名为success的action设置默认action当出现错误请求时则会跳转到index页⾯设置全局结果 当结果为 error时则跳⼊错误页⾯注意action标签不能放在global标签前⾯。
基于Struts2的无刷新翻页报表系统的设计与实现
问其 他的数据库系统 ,最后返 回一个 H ML页面到客户端。 T 这种 旧的途径使 得每 一个 动作用 户都 要等待 ,如何 按桌 面程序 的思 维设计 We b应用 ,不 让用户总是 等待 。通 过在用
()将上面 的变量以 x l 4 m 数据的形式传递到客户端。
() 客 户 端 脚 本 对 x l 据 进 行 接 受 并 解 析 ,通 过 Jv 5 m数 aa Srt c p 实现 无 刷 新 的 翻 页 。 i
I 用户接 1 3
■………………………一~
I
用户接 1 3
CJ I I , IN Cm  ̄ , A ho u , H OJ Q A , h Y OS aw ¥ A | i
(. aj gU iesyo eh oo y Naj g 2 1 1 ; . uh uXi ay a rse tn s O. T , z o 10 2 1 N ni nv r t f c n lg , ni 1 8 6 2 H zo n iunC uh dSo e , D Huh u3 3 2 ) n i T n k C L
< fle -cas> / tr l s i </ le > i f tr <fle-m a i g i tr pp n >
通常使用 X ,不用再耽误用户界面的交互 。 ML
客户端浏览器
… … … … … . … … . … . .
:
“ ~
客 户 端浏 览 器
^ 一 一 一 一 … 一 ~ 一 一
I 用 户接 口
用户接 1 3
如何实现在基于J2EE Struts框架的Web应用中实现数据分页显示功能
1.1如何实现在基于J2EE Struts框架的Web应用中实现数据分页显示功能1、Web分页原理分页问题是一个非常普遍的问题,开发者几乎都会遇到。
因为Http的无状态性,每一次提交都是当作一个新的请求来处理,即使是换页,上一次的结果对下一次是没有影响的。
一般有三种实现分页的方式。
(1)每次取查询结果的所有数据,然后根据页码显示指定的纪录。
(2)根据页面只取一页数据,然后显示这一页,这里要构造sql语句。
(3)取一定页数的数据,就是前面两种的折中。
2、编程实现中的程序的实现方式——可以采用下面的几中形式(1)JSP+JavaBean(2)JSP+JavaBean+Tag标签库(3)利用Struts方式(JSP+Action +JavaBean)3、关于采用“JSP+JavaBean+Tag标签库”方式的实现示例(1)JSP页面1)引用标签库的*.tld<%@ taglib uri="/usertaglib/PageDataGuideBarWithAttrTag.tld"prefix="showGuideBar" %> 2)创建除为导航条提供初始参数的JavaBean的对象<jsp:useBean id="getShowGuideBarParamBeanID" scope="page"class="netbookbean.ViewHelper_GetShowGuideBarParam"/> 3)对ViewHelper_GetShowGuideBarParam.java的初始化方法的调用<%getShowGuideBarParamBeanID.guideBar_Init(pageContext);recordSet=getShowGuideBarParamBeanID.getRecordSet();%>(2)为标签库提供初始化参数<showGuideBar:PageDataGuideBarWithAttrTag currentShowPage="<%=newInteger(getShowGuideBarParamBeanID.getCurrentShowPage()).toString()%>"totalPageCount="<%=newInteger(getShowGuideBarParamBeanID.getTotalPageCount()).toString()%>"recordTotalCount="<%=newInteger(getShowGuideBarParamBeanID.getRecordTotalCount()).toString()%>"recordCounterPerPage="<%=newInteger(recordCounterPerPage).toString()%>" />(3)显示分页的数据(4)编程实现为导航条提供初始参数的JavaBean组件---ViewHelper_GetShowGuideBarParam.java(5)编程实现导航条功能的标签库----PageDataGuideBarWithAttrTag.java4、关于利用Struts方式(JSP+Action +JavaBean)方式的实现示例既然采用Struts,那自然离不了MVC,分页显示也是如此。
Struts分页显示
Book[] books=pd.getPreviousPage();
request.setAttribute("resule",books);
request.setAttribute("page",pd);
4)建立视图组件,这部分JSP来实现,为了不出现JAVA代码,使用Struts提供的标签库,主要负责从Request中取出刚刚放入的对象,通过反复调用Action以及action参数,而实现分页显示,是pagetest.jsp.
5)建立并配置struts-config.xml和web.xml文件.
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
…………………………………………………………………………
这个是控制器Action类
package page;
import org.apache.struts.action.*;
2)建立分页所需要的模型组件,也是用JavaBean,通过Book提供的ArrayList来构造,这里用的是PageBean.java.
3)建立控制器组件,这部分由Struts的Action来实现,主要负责实例化Book,并利用返回的ArrayList对象,构造PageBean,以及接收由视图传递来的action参数,从而在PageBean对象中调用不同的方法,该方法返回Book[]对象,最后将Book[]和PageBean放入到request中.本Action为PageListAction.java.
e.printStackTrace();
struts2+spring+hibernate分页显示完整代码
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:publicinterface MemberDao {@SuppressWarnings("unchecked")/*** 分页查询* @param hql查询的条件* @param offset 开始记录* @param length 一次查询几条记录* @return*/public List queryForPage(final Stringhql,finalint offset,finalint length);/*** 查询所有记录数* @param hql查询的条件* @param offset 开始记录* @return总记录数*/publicint getAllRowCount(String hql);}2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:publicclass MemberDaoImpl extends HibernateDaoSupport implements Me mberDao {/*** 查询所有记录数* @return总记录数*/publicint getAllRowCount(String hql) {return getHibernateTemplate().find(hql).size();}/*** 分页查询* @param hql查询的条件* @param offset 开始记录* @param length 一次查询几条记录* @return*/@SuppressWarnings("unchecked")public List queryForPage(final String hql, finalint offset, finalint length) {List list =getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)throws HibernateException, SQLException {Query query = session.createQuery(hql);query.setFirstResult(offset);query.setMaxResults(length);List list = query.list();return list;}});return list;}}细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring 提供的对Hibernate支持的类,getHibernateTemplate().executeFind(new HibernateCallback(){....})方法中的参数,我们使用了接口回调,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。
struts2标签详解
struts2标签详解收藏52、action前缀使用action前缀,取代form标签指定的action,导向到另一个action进行处理。
<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="注册" name="action:register"></s:submit></s:form>2、redirect前缀使用redirect前缀请求重定向到其他的url,甚至可以是web英语程序外部的url。
<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="搜索" name="redirect:"></s:submit></s:form>2、redirect-action前缀使用redirect-action前缀请求重定向到其他的action.<s:form action="login"><s:textfield name="ername" label="用户名"></s:textfield><s:textfield name="user.password" label="密码"></s:textfield><s:submit value="登陆"></s:submit><s:submit value="搜索" name="redirect-action:register"></s:submit></s:form>reset标签reset标签输出一个重置按钮名称必需默认类型描述type否inputString要使用的重置按钮的内容,input、button<s:reset value="重置"></s:reset><s:reset type="button" label="重置"></s:reset>updownselect标签updownselect标签创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框的选项的位置。
yii2实现分页,带搜索的分页功能示例
yii2实现分页,带搜索的分页功能⽰例⼀、模型配置事例会⽤到三个models。
⽂章类别表和⽂章表⽤gii⽣成下即可,最后⼀个是搜索验证模型。
其中,只讲下⼀个联表和搜索验证。
其他不⽤操作。
1.⽂章表关联<?php//...other code//关联public function getCate(){return $this->hasOne(ArticleCate::className(),['id' => 'cid']);}>2.搜索模型common/models/search/创建ArticleSearch.php<?phpnamespace common\models\search;use Yii;use yii\base\Model;use yii\data\ActiveDataProvider;use common\models\Article;class ArticleSearch extends Article{//public $cname;//⽂章类别名/*** @inheritdoc*/public function rules(){return [[['cid','created_at', 'updated_at'], 'integer'],[['id', 'desc','title','cover','content'], 'safe'],];}/*** @inheritdoc*/public function scenarios(){// bypass scenarios() implementation in the parent classreturn Model::scenarios();}//搜索public function search($params){$query = Article::find();// $query->joinWith(['cate']);//关联⽂章类别表// $query->joinWith(['author' => function($query) { $query->from(['author' => 'users']); }]);$dataProvider = new ActiveDataProvider(['query' => $query,'pagination' => ['pageSize' => 2,],]);// 从参数的数据中加载过滤条件,并验证$this->load($params);if (!$this->validate()) {// uncomment the following line if you do not want to any records when validation fails// $query->where('0=1');return $dataProvider;}// 增加过滤条件来调整查询对象$query->andFilterWhere([// 'cname' => $this->ame,'title' => $this->title,]);$query->andFilterWhere(['like', 'title', $this->title]);//$query->andFilterWhere(['like', 'ame', $this->cname]) ;return $dataProvider;}}⼆、分页使⽤⽅式⼀⾸先在控制器的动作中,创建分页对象并且为其填充数据:<?php//other codeuse yii\data\Pagination;public function actionArticlelist(){//分页读取类别数据$model = Article::find()->with('cate');$pagination = new Pagination(['defaultPageSize' => 3,'totalCount' => $model->count(),]);$model = $model->orderBy('id ASC')->offset($pagination->offset)->limit($pagination->limit)->all();return $this->render('index', ['model' => $model,'pagination' => $pagination,]);}>其次在视图中我们输出的模板为当前页并通过分页对象链接到该页:<?phpuse yii\widgets\LinkPager;use yii\helpers\Html;use yii\helpers\Url;//other codeforeach ($models as $model) {// 在这⾥显⽰ $model}// 显⽰分页echo LinkPager::widget(['pagination' => $pagination,'firstPageLabel'=>"First",'prevPageLabel'=>'Prev','nextPageLabel'=>'Next','lastPageLabel'=>'Last',]);>⽅式⼆控制器:<?php$query = Article::find()->with('cate');$provider = new ActiveDataProvider(['query' => $query,'pagination' => ['pageSize' => 3,],'sort' => ['defaultOrder' => [//'created_at' => SORT_DESC,//'title' => SORT_ASC,]],]);return $this->render('index', ['model' => $query,'dataProvider' => $provider]);>视图:<?phpuse yii\grid\GridView;echo GridView::widget(['dataProvider' => $dataProvider,//每列都有搜索框控制器传过来$searchModel = new ArticleSearch();//'filterModel' => $searchModel,'layout'=> '{items}<div class="text-right tooltip-demo">{pager}</div>','pager'=>[//'options'=>['class'=>'hidden']//关闭⾃带分页'firstPageLabel'=>"First",'prevPageLabel'=>'Prev','nextPageLabel'=>'Next','lastPageLabel'=>'Last',],'columns' => [//['class' => 'yii\grid\SerialColumn'],//序列号从1开始// 数据提供者中所含数据所定义的简单的列// 使⽤的是模型的列的数据'id','username',['label'=>'⽂章类别', /*'attribute' => 'cid',产⽣⼀个a标签,点击可排序*/ 'value' => 'ame' ], ['label'=>'发布⽇期','format' => ['date', 'php:Y-m-d'],'value' => 'created_at'],// 更复杂的列数据['label'=>'封⾯图','format'=>'raw','value'=>function($m){return Html::img($m->cover,['class' => 'img-circle','width' => 30]);}],['class' => 'yii\grid\DataColumn', //由于是默认类型,可以省略'value' => function ($data) {return $data->name;// 如果是数组数据则为 $data['name'] ,例如,使⽤SqlDataProvider 的情形。
struts2标签详解
Struts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。
由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。
aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。
如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。
默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。
下面是本示例应用中的Action类,包含连个处理逻辑。
代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。
struts2常用标签详解
struts2标签详解A:<s:a xhref=""></s:a>-----超链接,类似于html里的<a></a><s:action name=""></s:action>-----执行一个view里面的一个action<s:actionerror/>-----如果action的errors有值那么显示出来<s:actionmessage/>-----如果action的message有值那么显示出来<s:append></s:append>-----添加一个值到list,类似于list.add();<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajaxB:<s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值C:<s:checkbox></s:checkbox>-----复选框<s:checkboxlist list=""></s:checkboxlist>-----多选框<s:combobox list=""></s:combobox>-----下拉框<s:component></s:component>-----图像符号D:<s:date/>-----获取日期格式<s:datetimepicker></s:datetimepicker>-----日期输入框<s:debug></s:debug>-----显示错误信息<s:div></s:div>-----表示一个块,类似于html的<div></div><s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框E:<s:if test="#name=‟hujianqiang‟">asdfasdf</s:if><s:elseif test=""></s:elseif><s:else></s:else>-----这3个标签一起使用,表示条件判断F:<s:fielderror></s:fielderror>-----显示文件错误信息<s:file></s:file>-----文件上传<s:form action=""></s:form>-----获取相应form的值G:<s:generator separator="" val=""></s:generator>----和<s:iterator>标签一起使用H:<s:head/>-----在<head></head>里使用,表示头文件结束<s:hidden></s:hidden>-----隐藏值I:<s:i18n name=""></s:i18n>-----加载资源包到值堆栈<s:include value=""></s:include>-----包含一个输出,servlet或jsp页面<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输入<s:iterator></s:iterator>-----用于遍历集合L:<s:label></s:label>-----只读的标签M:<s:merge></s:merge>-----合并遍历集合出来的值O:<s:optgroup></s:optgroup>-----获取标签组<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择框P:<s:param></s:param>-----为其他标签提供参数<s:password></s:password>-----密码输入框<s:property/>-----得到'value'的属性<s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性R:<s:radio list=""></s:radio>-----单选按钮<s:reset></s:reset>-----重置按钮S:<s:select list=""></s:select>-----单选框<s:set name=""></s:set>-----赋予变量一个特定范围内的值<s:sort comparator=""></s:sort>-----通过属性给list分类<s:submit></s:submit>-----提交按钮<s:subset></s:subset>-----为遍历集合输出子集T:<s:tabbedPanel id=""></s:tabbedPanel>-----表格框<s:table></s:table>-----表格<s:text name=""></s:text>-----I18n文本信息<s:textarea></s:textarea>-----文本域输入框<s:textfield></s:textfield>-----文本输入框<s:token></s:token>-----拦截器<s:tree></s:tree>-----树<s:treenode label=""></s:treenode>-----树的结构U:<s:updownselect list=""></s:updownselect>-----多选择框<s:url></s:url>-----创建urlStruts2常用的Ajax标签Struts2为了简化Ajax过程,提供了一些常用的Ajax标签,对于一些更复杂的Ajax通信过程,我们可以使用JSON插件来实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while (pageNumber > pageCount) {
pageNumber--;
}
page.setCurrentPage("" + pageNumber);
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>basetag</short-name>
<!-- 分页标签定义 -->
<tag>
<name>getRequestParam</name>
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
request.getSession().setAttribute("pageTagId", id);
return super.doStartTag();
List<ComplaintView> complaintViewList = new ArrayList<ComplaintView>();
copyProperties(complaintViewList, cl);
request.setAttribute("complaintViewList", complaintViewList);
<tag-class>tag.GetRequestParam</tag-class> <======自定义标签类
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<description>The name of the Request Param.</description>
</attribute>
<attribute>
<name>id</name>
<required>false</required>
//step3,执行分页查询 传入开始索引和页面记录条数***************************
List<Complaint> cl = complaintService.findComplaints(
page.getStartRow(), page.getPageSize());
* @param request 请求
* @param count 记录总数
* @param pageSize 每页记录数
* @return
*/
public Page paging(HttpServletRequest request, int count, int pageSize) {
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public String getId() {
return id;
}
private static final long serialVersionUID = 1L;
private String name;
private String id;
public GetRequestParam() {
}
public int doStartTag() throws JspException {
} else {
page = (Page) request.getSession().getAttribute("sp_list_sp" + request.getServletPath());
page.reInit(count);
int pageCount = page.getPageCount();
String pageTagId = (String) request.getSession().getAttribute("pageTagId");
// System.out.println("pageTagId:"+pageTagId);
Page page;//分页对象
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import ng.StringUtils;
/**
* 分页工具类
* @author xin
}
return page;
}
======================================================
6,分页工具类 Page
======================================================
package util;
String pageNumberStr = request.getParameter("pageNumber");
if (StringUtils.isBlank(pageNumberStr)) {
page = new Page(count,pageSize);
request.getSession().setAttribute("sp_list_sp" + request.getServletPath(), page);
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* 自定义标签类
*/
public class GetRequestParam extends BodyTagSupport {
2,在jsp页面引入 base.tld
<%@ taglib prefix="b" uri="/WEB-INF/tld/base.tld" %>
=========================================================
3,在需要翻页处使用
<b:getRequestParam name="navbar" />
=========================================================
4,自定义标签类tag.GetRequestParam
=========================================================
package tag;
*/
public class Page {
private static int DEFAULT_PAGESIZE = 10; // 默认页面大小
private static int DEFAULT_PAGE = 1; // 默认第一页
private int currentpage = 1;
import java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
//step4,获得分页标签内容***************************
String bar = page.getNavBar(request); //关键方法
request.setAttribute("navbar", bar);
}
/**
* 分页方法 计算页面参数,被分页查询调用, 存在于BaseAction中
pageContext.getOut().write(request.getAttribute(name) + "");
} catch (IOException ex) {
throw new JspTagException("GetRequestParam 异常");
}
return super.doEndTag();
<rtexprvalue>false</rtexprvalue>
<description>Unique identifier.</description>
</attribute>