注意:只显示部分代码
1.查询所有
public class AdminProductListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService adminProductService=new AdminProductService();
List<Product> productList=null;
try {
productList = adminProductService.findAll();
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("productList", productList);
request.getRequestDispatcher("/admin/product/list.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2.1增加商品
public class AdminAddProductUIServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService service=new AdminProductService();
List<Category> categoryList=null;
try {
categoryList = service.findAllCategory();
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("categoryList", categoryList);
request.getRequestDispatcher("/admin/product/add.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2.2真正的添加
public class AdminAddproductServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService service=new AdminProductService();
Product product=new Product();
Map<String, String[]> properties=request.getParameterMap();
try {
BeanUtils.populate(product, properties);
} catch (Exception e) {
e.printStackTrace();
}
//此位置Product已经封装完毕----将表单的数据封装完毕
//手动设置表单中没有数据
//手动设置表单中没有的数据
/*private String pid;
private String pimage;
private String pdate;
private int pflag;*/
product.setPid(UUID.randomUUID().toString());
product.setPimage("products/1/c_0001.jpg");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String pdate=sdf.format(new Date());
product.setPdate(pdate);
product.setPflag(0);
try {
service.addProduct(product);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect(request.getContextPath()+"/adminProductListServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3.删除商品
//阻止事件的传播行为
<a href="javascript:void(0);" onclick="delProduct('${product.pid}')">
<script type="text/javascript">
function delProduct(pid){
var isDel=confirm("您确定要删除么??");
if(isDel){
location.href = "${pageContext.request.contextPath }/delProductServlet?pid="+pid;
}
}
</script>
public class DelProductServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService service=new AdminProductService();
String pid=request.getParameter("pid");
try {
service.deleteById(pid);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect(request.getContextPath()+"/adminProductListServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4.1修改商品(先数据回显)
public class AdminUpdateProductUIServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService service=new AdminProductService();
String pid=request.getParameter("pid");
Product product=null;
try {
product = service.findProductById(pid);
} catch (SQLException e1) {
e1.printStackTrace();
}
List<Category> categoryList=null;
try {
categoryList=service.findAllCategory();
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("product", product);
request.setAttribute("categoryList", categoryList);
request.getRequestDispatcher("/admin/product/edit.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
//正常的回显
<td width="18%" align="center" bgColor="#f5fafe" class="ta_01">
商品名称:
</td>
<td class="ta_01" bgColor="#ffffff">
<input type="text" name="pname" id="userAction_save_do_logonName" class="bg" value="${product.pname }"/>
</td>
//下拉框的回显
<td class="ta_01" bgColor="#ffffff" colspan="3">
<select name="cid" id="cid">
<c:forEach var="category" items="${categoryList }">
<option value="${category.cid }">${category.cname }</option>
</c:forEach>
</select>
</td>
//textarea回显
<td class="ta_01" bgColor="#ffffff" colspan="3">
<textarea name="pdesc" rows="5" cols="30" >${product.pdesc }</textarea>
</td>
//使用jQuery回显下拉框信息
<script type="text/javascript">
$(function(){
$("#cid option[value='${product.cid}']").prop("selected",true);
});
</script>
//使用js回显下拉框信息
/* window.onload = function(){
//获得当前回显的product的cid
var cid = "${product.cid }";
//获得所有的<select name="cid">下的option
var options = document.getElementById("cid").getElementsByTagName("option");
//比较每一个option的value与cid
for(var i=0;i<options.length;i++){
if(cid==options[i].value){
options[i].selected = true;
}
}
} */
4.2修改商品
修改商品本质上和添加商品没什么区别,主要区别就是页面添加一行代码
<input type="hidden" name="pid" value="${product.pid }">
//后台的pid已经通过request.getParameterMap()传递到了前端了
public class AdminProductUpdateServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
AdminProductService service=new AdminProductService();
Map<String, String[]> properties=request.getParameterMap();
Product product=new Product();
try {
BeanUtils.populate(product, properties);
} catch (Exception e) {
e.printStackTrace();
}
product.setPimage("products/1/c_0001.jpg");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String pdate=sdf.format(new Date());
product.setPdate(pdate);
product.setPflag(0);
try {
service.updateProduct(product);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect(request.getContextPath()+"/adminProductListServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
5.1:按照条件搜索(条件搜索数据回显)
前台:
<script type="text/javascript">
$(function(){
$("#isHot option[value='${condition.isHot}']").prop("selected",true);
$("#cid option[value='${condition.cid}']").prop("selected",true);
});
</script>
<form id="Form1" name="Form1"
action="${pageContext.request.contextPath}/conditionListServlet"
method="post">
商品名称:<input type="text" name="pname" value="${condition.pname}" }>
是否热门:
<select name="isHot" id="isHot">
<option>不限</option>
<option value="1">是</option>
<option value="0">否</option>
</select>
商品类别:
<select name="cid" id="cid">
<option value="">不限</option>
<c:forEach var="category" items="${categoryList}">
<option value="${category.cid}">${category.cname}</option>
</c:forEach>
</select>
<input type="submit" value="搜索">
后台:
//将条件封装成实体
public class ConditionVO {
private String pname;
private String isHot;
private String cid;
}
//Controller
public class ConditionListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AdminProductService service=new AdminProductService();
request.setCharacterEncoding("utf-8");
Map<String, String[]> properties=request.getParameterMap();
ConditionVO condition=new ConditionVO();
try {
BeanUtils.populate(condition, properties);
} catch (Exception e) {
e.printStackTrace();
}
List<Product> productList=null;
List<Category> categoryList=null;
try {
productList = service.findProductByCondition(condition);
categoryList=service.findAllCategory();
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("condition", condition);
request.setAttribute("productList", productList);
request.setAttribute("categoryList",categoryList);
request.getRequestDispatcher("/admin/product/list.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
//dao
public List<Product> findProductByCondition(ConditionVO condition) throws SQLException {
String sql="select * from product where 1=1";
//定义一个容器存储参数
List<String> list=new ArrayList<String>();
if(condition.getPname()!=null&&!condition.getPname().trim().equals("")){
sql+=" and pname like ?";
list.add("%"+condition.getPname().trim()+"%");
}
if(condition.getIsHot()!=null&&!condition.getIsHot().trim().equals("")){
sql+=" and is_hot=?";
list.add(condition.getIsHot().trim());
}
if(condition.getCid()!=null&&!condition.getCid().trim().equals("")){
sql+=" and cid=?";
list.add(condition.getCid().trim());
}
return queryRunner.query(sql, new BeanListHandler<Product>(Product.class),list.toArray());
}
5.2前台的分页
//PageBean实体类,set和get方法省略
public class PageBean<T> {
private int currentPage;
private int pageSize;
private int totalPage;
private int totalSize;
private List<T> products=new ArrayList<T>();
//Controller
public class ProductListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ProductService servcie=new ProductService();
//传入当前页和当前页显示的条数
String currentPageStr=request.getParameter("currentPage");
if(currentPageStr==null){
currentPageStr="1";
}
int currentPage=Integer.parseInt(currentPageStr);
int pageSize=12;
PageBean<Product> pageBean=null;
try {
pageBean=servcie.findPageBean(currentPage,pageSize);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("pageBean", pageBean);
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
//service
public class ProductService {
public PageBean findPageBean(int currentPage, int pageSize) throws SQLException {
ProductDao dao=new ProductDao();
PageBean pageBean=new PageBean();
pageBean.setCurrentPage(currentPage);
pageBean.setPageSize(pageSize);
int totalSize=dao.findTotalCount();
pageBean.setTotalSize(totalSize);
// 总页数
int totalPage=totalSize%pageSize==0?totalSize/pageSize:totalSize/pageSize+1;
pageBean.setTotalPage(totalPage);
// 每页显示的数据
int index=(currentPage-1)*pageSize;
List<Product> productList=dao.findProductListByPageBean(index,pageSize);
pageBean.setProducts(productList);
return pageBean;
}
}
//dao
public class ProductDao {
public List<Product> findAllProduct() throws SQLException {
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from product";
return runner.query(sql, new BeanListHandler<Product>(Product.class));
}
//获得全部的商品条数
public int findTotalCount() throws SQLException {
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select count(*) from product";
Long query = (Long) runner.query(sql, new ScalarHandler());
return query.intValue();
}
//获得分页的商品数据
public List<Product> findProductListByPageBean(int index, int pageSize) throws SQLException {
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from product limit ?,?";
Object[] obj={index,pageSize};
return runner.query(sql, new BeanListHandler<Product>(Product.class),obj);
}
}
//页面
<c:forEach var="product" items="${pageBean.products}">
<div class="col-md-2" style="height:250px">
<a href="product_info.htm"> <img src="${pageContext.request.contextPath }/${product.pimage }"
width="170" height="170" style="display: inline-block;">
</a>
<p>
<a href="product_info.html" style='color: green'>${product.pname }</a>
</p>
<p>
<font color="#FF0000">商城价:¥${product.shop_price }</font>
</p>
</div>
</c:forEach>
<!--分页 -->
<div style="width: 380px; margin: 0 auto; margin-top: 50px;">
<ul class="pagination" style="text-align: center; margin-top: 10px;">
<!-- 上一页 -->
<!-- 判断当前页是否是第一页 -->
<c:if test="${pageBean.currentPage==1 }">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=1 }">
<li>
<a href="${pageContext.request.contextPath }/productListServlet?currentPage=${pageBean.currentPage-1}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<!-- 判断当前页 -->
<c:forEach var="page" begin="1" end="${pageBean.totalPage }">
<c:if test="${pageBean.currentPage==page}">
<li class="active"><a href="javascript:void(0);">${page }</a></li>
</c:if>
<c:if test="${pageBean.currentPage!=page}">
<li ><a href="${pageContext.request.contextPath }/productListServlet?currentPage=${page}">${page}</a></li>
</c:if>
</c:forEach>
<!-- 下一页 -->
<!-- 判断当前页是否是最后一页 -->
<c:if test="${pageBean.currentPage==pageBean.totalPage }">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage }">
<li>
<a href="${pageContext.request.contextPath }/productListServlet?currentPage=${pageBean.currentPage+1}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
</ul>
</div>
<!-- 分页结束 -->
6.1批量删除选中(在外面加个form提交即可)
//后台代码
public class DelSelectServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String [] ids=request.getParameterValues("uid");
AdminProductService service=new AdminProductService();
try {
service.deleteSelectIds(ids);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect(request.getContextPath()+"/adminProductListServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
public void deleteSelectIds(String[] ids) throws SQLException {
if(ids !=null && ids.length>0){
for(String pid:ids){
adminProductDao.deleteById(pid);
}
}
}
public void deleteById(String pid) throws SQLException {
String sql="delete from product where pid=?";
queryRunner.update(sql, pid);
}
6.2批量删除选中(提高用户体验:如全选和全不选,删除之前给提示,批量删除至少选中一个)
全选和全不选JS代码实现
这个是另一个项目中的 页面批量删除多个用户 分页以及复杂条件分页查询的内容
页面批量删除多个用户
<form action="${pageContext.request.contextPath}/DelUsersServlet" method="post" id="form">
<table border="1" class="table table-bordered table-hover">
<tr>
<td colspan="8" align="center">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
<a class="btn btn-primary" href="javascript:void(0);" id="delAll">批量删除用户</a>
</td>
</tr>
<tr class="success">
<th><input type="checkbox" id="checkAll"> </th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach var="user" items="${userList}">
<tr>
<td><input type="checkbox" name="checkone" value="${user.id}"></td>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="update.html">修改</a> <a class="btn btn-default btn-sm" href="javascript:;" onclick="del('${user.id}')">删除</a></td>
</tr>
</c:forEach>
</table>
</form>
window.onload=function () {
document.getElementById("delAll").onclick=function () {
if(confirm("您确认要删除选中的多个用户吗?")){
var flag=false;
var names = document.getElementsByName("checkone");
for(var i=0;i<names.length;i++){
if(names[i].checked){
flag=true;
break;
}
}
if(flag){
document.getElementById("form").submit();
}
}
}
}
后台:
String[] checkone = request.getParameterValues("checkone");
分页
public class PageBean<T> {
private int currentPage;
private int pageSize;
private int totlaCount;
private int totalPage;
private List<T> list;
}
@WebServlet("/ShowPageListServlet")
public class ShowPageListServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserService service=new UserServiceImpl();
String currentPageStr = request.getParameter("currentPage");
String pageSizeStr = request.getParameter("pageSize");
if(currentPageStr==null || "".equals(currentPageStr)){
currentPageStr="1";
}
if(pageSizeStr==null || "".equals(pageSizeStr)){
pageSizeStr="3";
}
PageBean<User> pageBean=service.showPageList(currentPageStr,pageSizeStr);
request.setAttribute("pageBean",pageBean);
request.getRequestDispatcher("/list.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
PageBean<User> showPageList(String currentPageStr, String pageSizeStr);
public PageBean<User> showPageList(String currentPageStr, String pageSizeStr) {
PageBean pageBean=new PageBean();
int currentPage = Integer.parseInt(currentPageStr);
int pageSize = Integer.parseInt(pageSizeStr);
if(currentPage<=0){
currentPage=1;
}
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
int totalCount=dao.findTotalCount();
pageBean.setTotlaCount(totalCount);
int totalPage=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
pageBean.setTotalPage(totalPage);
int index=(currentPage-1)*pageSize;
List<User> userList=dao.findListByPage(index,pageSize);
pageBean.setList(userList);
return pageBean;
}
int findTotalCount();
List<User> findListByPage(int index,int pageSize);
public int findTotalCount() {
String sql="select count(1) from user";
return jdbcTemplate.queryForObject(sql,Integer.class);
}
public List<User> findListByPage(int index, int pageSize) {
String sql="select * from user limit ?,?";
return jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class),index,pageSize);
}
页面
<nav aria-label="Page navigation">
<%--前一页--%>
<ul class="pagination">
<c:if test="${pageBean.currentPage==1}">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=1}">
<li>
<a href="${pageContext.request.contextPath}/ShowPageListServlet?currentPage=${pageBean.currentPage -1}&pageSize=3" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<%--当前页--%>
<c:forEach begin="1" end="${pageBean.totalPage}" var="page">
<c:if test="${pageBean.currentPage == page}">
<li class="active"><a href="javascript:void(0);">${page}</a></li>
</c:if>
<c:if test="${pageBean.currentPage!=page}">
<li><a href="${pageContext.request.contextPath}/ShowPageListServlet?currentPage=${page}&pageSize=3">${page}</a></li>
</c:if>
</c:forEach>
<%--后一页--%>
<c:if test="${pageBean.currentPage==pageBean.totalPage}">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Previous">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage}">
<li>
<a href="${pageContext.request.contextPath}/ShowPageListServlet?currentPage=${pageBean.currentPage +1}&pageSize=3" aria-label="Previous">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
</ul>
</nav>
复杂条件分页查询
排除当前页和每页显示的条数
@WebServlet("/ShowPageListServlet")
public class ShowPageListServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserService service=new UserServiceImpl();
String currentPageStr = request.getParameter("currentPage");
String pageSizeStr = request.getParameter("pageSize");
if(currentPageStr==null || "".equals(currentPageStr)){
currentPageStr="1";
}
if(pageSizeStr==null || "".equals(pageSizeStr)){
pageSizeStr="3";
}
//条件查询
Map<String, String[]> condition = request.getParameterMap();
PageBean<User> pageBean=service.showPageList(currentPageStr,pageSizeStr,condition);
request.setAttribute("pageBean",pageBean);
//将查询条件存入request
request.setAttribute("condition",condition);
request.getRequestDispatcher("/list.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
public PageBean<User> showPageList(String currentPageStr, String pageSizeStr, Map<String, String[]> condition) {
PageBean pageBean=new PageBean();
int currentPage = Integer.parseInt(currentPageStr);
int pageSize = Integer.parseInt(pageSizeStr);
if(currentPage<=0){
currentPage=1;
}
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
int totalCount=dao.findTotalCount(condition);
pageBean.setTotlaCount(totalCount);
int totalPage=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
pageBean.setTotalPage(totalPage);
int index=(currentPage-1)*pageSize;
List<User> userList=dao.findListByPage(index,pageSize,condition);
pageBean.setList(userList);
return pageBean;
}
public int findTotalCount(Map<String, String[]> condition) {
String sql="select count(1) from user where 1=1";
StringBuilder sb = new StringBuilder(sql);
Set<String> keys = condition.keySet();
//定义参数的集合
List<Object> list=new ArrayList<>();
for(String key: keys){
//排除分页条件参数
if("currentPage".equals(key) || "pageSize".equals(key)){
continue;
}
//获取value
String value = condition.get(key)[0];
//判断value是否有值
if(value != null && !"".equals(value)){
//有值
sb.append(" and "+key+" like ? ");
list.add("%"+value+"%");//加?条件的值
}
}
return jdbcTemplate.queryForObject(sb.toString(),Integer.class,list.toArray());
}
public List<User> findListByPage(int index, int pageSize, Map<String, String[]> condition) {
String sql="select * from user where 1=1";
StringBuilder sb = new StringBuilder(sql);
Set<String> keys = condition.keySet();
List<Object> list=new ArrayList<>();
for(String key: keys){
//排除分页条件参数
if("currentPage".equals(key) || "pageSize".equals(key)){
continue;
}
//获取value
String value = condition.get(key)[0];
//判断value是否有值
if(value != null && !"".equals(value)){
//有值
sb.append(" and "+key+" like ? ");
list.add("%"+value+"%");//?条件的值
}
}
//添加分页查询
sb.append(" limit ?,? ");
//添加分页查询参数值
list.add(index);
list.add(pageSize);
sql = sb.toString();
return jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class),list.toArray());
}
<div style="float: left;">
<form class="form-inline" action="${pageContext.request.contextPath}/ShowPageListServlet" method="post">
<div class="form-group">
<label for="exampleInputName2">姓名</label>
<input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2" >
</div>
<div class="form-group">
<label for="exampleInputName3">籍贯</label>
<input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3" >
</div>
<div class="form-group">
<label for="exampleInputEmail2">邮箱</label>
<input type="text" name="email" value="${condition.email[0]}" class="form-control" id="exampleInputEmail2" >
</div>
<button type="submit" class="btn btn-default">查询</button>
</form>
</div>
分页的地方记得也要将条件放上去
<a href="${pageContext.request.contextPath}/ShowPageListServlet?currentPage=${pageBean.currentPage -1}&pageSize=3&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>