mybatis+struts2+html(jstl)+css

            从10月8号到今天23号,来到工作已经半个月了,这是我人生中真正意义上的一次步入社会,用自己20年的坚持和努力取得的人生第一步,说实话,感觉自己真的是个lucky dog,好像是在眷顾我,所有的事情都是那么顺利,让我没有理由不珍惜现在的所有,谢谢老师,一次次的满足我的请求,这半月我收货到的不管是从为人处世,团队管理,还是技术方面都很多,所以每天晚上睡觉都会一躺就着,因为一睁开眼就会忙碌一天,不过真的真的很充实,下面先说说我从技术上的收获。

最近这段时间一直接触的是后台,咋说呢?最大的感受就是在学校的实践对我的影响是毋庸置疑的,加上后来参加java3.1和4.0,s让我能够比较快的接受现在的框架,说一下我最近做的一个模块:邀请管理。

需求:我们公司是一个理财公司,大家都知道邀请码,如果一个人邀请了另一个人会让被邀请人在注册时输入邀请码,如下图:

那在后来呢,在没有升级之前是没有对邀请人和被邀请人进行关联的,只有一个实体,那就有人给客服打电话说我明明已经输入邀请码了呀,为什么没有显示,那为什么邀请人会这么想要别人输入邀请码呢,因为如果被邀请人投资了,那么邀请人会有提成,所以需求就这么产生了,我们需要添加邀请人和被邀请人的关系,并且可以禁用,但是不可以修改,因为如果可以修改,操作后台的人就发财了,他可以随便把邀请人换成自己,所以这个是不可以的,而且还需要可以导出,其实还是挺简单的。下面我们先来说说查询功能:

MyBatis:

在这里我们需要写入查询语句,这个语句真的很庞大,需要从客户表中查出邀请人和被邀请人的信息,然后去投资表中查出被邀请人投资金额,在邀请人和被邀请人的关系表中查出该邀请人和被邀请人的关系:

           T_CUST_USER:客户表;T_LOAN_BID:投资表;T_CUST_USER_INVITE:邀请表

           下面看下我的sql语句:           

<span style="font-family: Arial, Helvetica, sans-serif;"><sqlMap namespace="<strong>CustomerUserInvite</strong>"></span>
<select id="<strong>queryInviterList</strong>" parameterClass="map" resultClass="java.util.HashMap">
		<![CDATA[
			SELECT t8.*,T9."NAME" FROM(
SELECT t7.* FROM
		(SELECT
			t5.USER_ID,
			t5.USER_NAME,
			t5.INVITE_USER_ID,
			t6.USER_NAME  AS INVITE_USER_NAME,
			t5.BID_AMOUNT,
			T5.operator_,
			T5.STATUS,
			t5.BID_STATUS,
TO_CHAR(T6.CREATE_TIME, 'yyyy-mm-dd hh24:mi:ss') CREATE_TIME,
			T5."ID"
				FROM
				(
					SELECT
					t3.USER_ID,
					T4.USER_NAME,
					t3.INVITE_USER_ID,
					t3.BID_AMOUNT,
					T3.operator_,
					t3.BID_STATUS,
					T3.STATUS,T3."ID"
						FROM
						(
							SELECT
							t1.USER_ID,
							t1.INVITE_USER_ID,
							t1.OPERATOR_,
							t2.BID_AMOUNT,
							t2.BID_STATUS,
							t1."ID",
							T1.STATUS
							FROM
							T_CUST_USER_INVITE t1
							LEFT JOIN T_LOAN_BID t2 ON t1.INVITE_USER_ID = t2.USER_ID
						) t3
					LEFT JOIN T_CUST_USER t4 ON t3.USER_ID = t4.ID
					) t5
		LEFT JOIN T_CUST_USER t6 ON t5.INVITE_USER_ID = t6. ID) t7
		WHERE 1=1)t8 LEFT JOIN T_USER_USER t9 ON t8.operator_=T9.id
	 ]]>
		<isNotEmpty prepend="" property="searchContent">
			WHERE (T8.USER_NAME LIKE
			'%$searchContent$%'
			OR T8.INVITE_USER_NAME LIKE '%$searchContent$%' )
		</isNotEmpty>
		<![CDATA[
			ORDER BY t8.STATUS DESC,t8.CREATE_TIME DESC
		]]>

	</select>
</sqlMap>

             D层:                          

public class InviterDAO extends AbstractBaseDAO<CustomerUserInviteBean> {

	public InviterDAO(SqlMapClient sqlMap) {
		super(sqlMap);
	}

	//	对应xml中的命名空间
		@Override
		public String getNameSpace() {
			return "CustomerUserInvite";
		}
	//	对应数据表
		@Override
		public String getTableName() {
			return "T_CUST_USER_INVITE";
		}
	/**
		 * 查询全部-王丹
		 *
		 * @param paramMap
		 * @return
		 * @throws Exception
		 */
public DataWrap pageQuery(Map paramMap) throws Exception {
		return (DataWrap) DataAccessor.query(getNameSpace()
				+ ".<strong>queryInviterList</strong>", paramMap, RS_TYPE.PAGED);
	}

}

           Service:            

/**
	 * 分页查询全部-王丹-2015年10月14日16:43:38
	 *
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public DataWrap pagingQuery(Map inputMap) throws Exception {
		return new InviterDAO(null).pageQuery(inputMap);

	}

           controller这儿需要注意一下:

         我们不是直接去找controller,而是放到配置文件中,通过name去查,用的是struts:         

<!-- 邀请人管理 -->
	<service name="InviterService" class="com.voiinnov.puhuilicai.customer.controller.InviterController"></service>

           下面看下controller:            

public class InviterController extends AService {
	private static Logger logger = Logger.getLogger(InviterController.class);

	private InviterService inviterService = new InviterService();

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void listInviter(Context context) {

		List errorList = context.errList;
//		用于存放返回结果,并用json返回到界面
		Map outputMap = inviterService.outputMap;

		try {
			DataWrap dataWarp = this.inviterService
					.pagingQuery(context.contextMap);

			// 结果集
			outputMap.put("dw", dataWarp);
			outputMap.put("searchContent",
					context.contextMap.get("searchContent"));
		} catch (Exception e) {
			e.printStackTrace();
			errorList.add("系统错误,请联系系统管理员!");
			logger.error(this.getClass().getName() + ":", e);
			e.printStackTrace();
		}
		if (context.errList.isEmpty()) {
			Output.jspOutput(outputMap, context,
					"/puhuilicai/customer/InviterList.jsp");
		} else {
			outputMap.put("errList", context.errList);
			Output.jspOutput(outputMap, context, "/error.jsp");
		}

	}

              jsp中:              

<body onload="setAction();">
	<form name="form1" id="form1"<strong> action="../servlet/defaultDispatcher"</strong>
		method="post">
		<input name="__action" value="<strong>InviterService.listInviter</strong>"
			type="hidden" /> <input name="statusShow" value="${statusShow }"
			type="hidden" />

		<!--头部开始-->
		<div id="fixedLayer">
			<div class="main">
				<div class="main_c main_bg">
					<div class="main_nav">
						<div class="nav_pic">
							<a href="javascript:void(0)" title="新增" onclick="initInviter()"><img
								src="${ctx }/commons/images/system/table_create1.gif" /></a>
							<a href="javascript:void(0);" title="导出" onclick="exportInviter()">
								<img src="../commons/images/system/ta_download1.jpg"></a>
							<ul style="float: right; margin-right: 5px; text-align: left;">
								<li><a href="javascript:void(0)" title="启用"
									onclick="updateStatus(0)">  启  用</a></li>
								<li><a href="javascript:void(0)" title="停用"
									onclick="updateStatus(-2)">  禁  用</a></li>
							</ul>

						</div>
					</div>
				</div>
			</div>
		</div>
		<!--头部结束-->
		<!-模糊查询开始-->
		<div class="margintop40"></div>
		<div class="main">
			<div class="main_c main_bg">
				<!--自适应宽度 -start-->
				<div class="table_scroll">
					<table width="100%" border="0" cellspacing="0" cellpadding="0">
						<tr>
							<td align="center" valign="top">
								<table width="100%" border="0" align="center" cellpadding="0"
									cellspacing="0" class="">
									<tr align="center" valign="middle">
										<td height="35" align="left" valign="middle"
											class="table_title_td_bg">
											<div style="float: left; line-height: 30px;">
												<span class=" margin_left10 font_white"><strong></strong></span>
											</div> <%@ include file="/commons/pageControl.jsp"%>

											<!-- 搜索和排序 -start-->
											<div style="float: right; line-height: 30px; width: 450px;">
												<div class="tsearch-panel-fields" style="margin-top: 6px;">
													<label for="searchContent">邀请人,被邀请人</label> <input
														name="searchContent" id="searchContent" type="text"
														class="span3" value="${searchContent }" />
												</div>
												<input type="image" onclick="doSearch();"
													src="${ctx }/commons/images/system/btn_search.png"
													style="width: 50px; height: 23px; margin-top: 6px; margin-left: 5px;" />

											</div> <!-- 搜索和排序 -end-->
									</tr>
								</table>
							</td>
						</tr>
					</table>
				</div>
<!-- 				查询表格 -->
				<table width="100%" border="1" align="center" cellpadding="0"
					cellspacing="0" class="table_style table2">
					<tr>
						<th style="text-align: center;" class="table_th_bg">序号
						</td>
						<th style="text-align: center;" class="table_th_bg">邀请人</th>
						<th style="text-align: center;" class="table_th_bg">被邀请人</th>
						<th style="text-align: center;" class="table_th_bg">注册时间</th>
						<th style="text-align: center;" class="table_th_bg">操作员</th>
						<th style="text-align: center;" class="table_th_bg">投资金额</th>
						<th style="text-align: center;" class="table_th_bg">投资状态</th>
						<th style="text-align: center;" class="table_th_bg">状态</th>

					</tr>
<!-- 					遍历查询结果 -->
					<c:forEach items="${dw.rs }" var="lists" varStatus="status">
						<tr id="${lists.ID}" USER_ID="${lists.USER_ID}"
							onclick="changeTrColor(this);" style="cursor: pointer;"
							<c:if test="${status.count % 2 == 0 }">bgcolor="#F5F5F5"</c:if>>
							<td style="text-align: center;">${status.count + dw.pageSize * (dw.currentPage - 1)}</td>
							<td height="24">${lists.USER_NAME}</td>
							<td height="24">${lists.INVITE_USER_NAME}</td>
							<td height="26px" >${lists.CREATE_TIME}</td>
							<td height="24">${lists.NAME}</td>
							<td height="24">

								<c:choose>
									<c:when test="${empty lists.BID_AMOUNT }">
										0
									</c:when>

									<c:otherwise>
									${lists.BID_AMOUNT}
									</c:otherwise>
								</c:choose>
							</td>
							<td height="24">
								<c:choose>
									<c:when test="${lists.BID_STATUS eq -1}">
										待付款
									</c:when>
									<c:when test="${lists.BID_STATUS eq 1}">
										投资中
									</c:when>
									<c:when test="${lists.BID_STATUS eq 2}">
										还款中
									</c:when>
									<c:when test="${lists.BID_STATUS eq 5}">
										债权转让
									</c:when>
									<c:when test="${empty lists.BID_STATUS }">
										未投资
									</c:when>
									<c:otherwise>
										未知
									</c:otherwise>
								</c:choose>
							</td>
							<td>
								<c:choose>
									<c:when test="${lists.STATUS eq 0}">
										启用
									</c:when>
									<c:otherwise>
										禁用
									</c:otherwise>
								</c:choose>
							</td>

						</tr>
					</c:forEach>
				</table>
				<%@ include file="/commons/pageControlBottom.jsp"%>
			</div>
		</div>
		<!--内容结束-->
		<div class="space"></div>
	</form>
</body>

             下面是出来的效果:

            

时间: 2024-08-03 06:32:39

mybatis+struts2+html(jstl)+css的相关文章

struts2 ognl jstl el java代码在jsp页面混用

<%@page import="action.UserBean"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib uri="http:/

Struts2 + Json + Jstl 节选自 《Netkiller Java 手札》

6.5. Json 内容展示 Struts 配置文件 <package name="information" extends="main" namespace="/inf"> <action name="Information" class="com.example.action.Infomation"> <result type="tiles">in

Struts1和Struts2的区别和对比

  Struts1和Struts2的区别和对比: Action 类:• Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式:• Struts

struts1 与struts2 有什么区别 菜鸟提问

问题描述 struts1与struts2有什么区别菜鸟提问 解决方案 解决方案二:两者的区别:Action类:◆Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口.◆Struts2Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对

mybatis-Mybatis+SpringMVC+dwz+jstl做二级菜单列表:如图。

问题描述 Mybatis+SpringMVC+dwz+jstl做二级菜单列表:如图. 解决方案 数据量也不大,将数据以JSON格式一次性输出到页面,通过jstl或JS循环加载.

struts2 标签问题

问题描述 struts2标签在s2sh项目中常用吗? 解决方案 解决方案二:好像不大常用吧?我觉得我好像都从来没这样用过?解决方案三:个人喜好,不用struts2的你可以用html也可以用其他前台的ext-js解决方案四:我还是比较常用的,根据个人喜好吧!解决方案五:常用用jstl解决方案六:一般都是struts2标签+jstl一起用解决方案七:每个公司都不一样的,即使一个公司不同项目也不好说,有时用有时不用!解决方案八:只是更方便而已吧看需求了解决方案九:个人习惯.如果你用得很熟练别人会认为你

struts1和struts2的区别

问题描述 如题 解决方案 解决方案二:-在Action实现类方面的对比:Struts1要求Action类继承一个抽象基类:Struts1的一个具体问题是使用抽象类编程而不是接口.Struts2Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts2的Action.-线程模式方面的对比:Str

java笔试题

v下面有关JVM内存,说法错误的是? A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的 B.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的 C.方法区用于存储JVM加载的类信息.常量.静态变量.即使编译器编译后的代码等数据,是线程隔离的 D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的 解析:方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域. 在方法区中,存储了每个

excel导入导出-一个面试任务,下次面试交

问题描述 一个面试任务,下次面试交 请完成minitask(需求列表导入导出功能)的开发 (1) 开发一个页面,完成需求列表的excel导入功能,要求有基本的页面校验,导入成功后跳转到成功页面,失败跳转到错误提示页面. (2) Excel导入后,要求使用ibatis批量入库. (3) 要求可以再前台通过集中过滤方式进行过滤展示. (4) 要求使用aop进行日志打印,日志打印级别以及日志划分请自行确定. 求助求助,可以怎么做?mybatis+struts2+spring+aop的基本框架,谢谢啦!