第三部分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39134861/article/details/82385005

一、拜访表【多对多关系映射】

hibernate提供do对多关系映射,两个主表中,都添加集合对象即可。hibernate提供的do对多关系映射,只需要存在2个字段。

我们希望:中间表应该有多个字段。例如:拜访时间,拜访地点,拜访人物,拜访事件。

我们在配置时,不直接使用hibernate的多对多配置,而是把中间表声明出来,声明成一个实体,我们就可以在是实体中添加多个字段。

客户拜访管理

客户拜访新增,查询,修改,删除

二、客户新增:

第一:新增前的操作:

点击【新增客户拜访】超链接的时候,联系人名称和客户名称一并出来。

查询出来客户,业务员信息放在值栈,方便后来在页面中显示。

[1.客户和联系人有关联:查询客户名称后,立即查询联系人的名称,并且显示在联系人的下拉菜单中。

2.业务员是登录的用户,登录的用户id是user.userId]

实现步骤:

  1. 修改超链接地址,访问action
  2. 准备action,查询客户和业务员信息。
  3. add.jsp页面遍历信息。

--客户名称一改变,立马查询联系人信息.  给客户添加一个onchange事件,

--事件处理:使用ajax访问服务器,服务器响应联系人的数据,   使用ajax响应,一般使用Json字符串

--ajax的回调函数中,把数据动态添加到  联系人下拉框.

代码[1]

三,客户查询:

代码[2]

客户分页查询:

  1. 分页条件+返回值 pageBean
  2. 当前页 和  每页显示个数
  3. service层做特殊处理,封装pageBean对象
  4. jsp页面特殊处理:比如:上一页 下一页 条件查询合并

jsp代码[3]

四,客户修改

  1. edit页面已经有所有的要修改的数据,只需要把数据提交到服务器就好

A.提交表单的action地址

B.在表单内部添加隐藏域,记录拜访人的id

  1. 服务器的action接收到数据,调用service层,调用dao层

A.获取表单的提交数据,和拜访记录的id

  1. 响应信息 在查询页面上显示.

五,权限控制

在每个action之前,添加一个判断,确保我们的用户是登陆状态..这是我们对  登录和注册进行放行.

可以使用过滤器,也可以使用拦截器.

--Struts2提供一个拦截器,好处是可以对指定的拦截器进行放行.

拦截器:

 <interceptors>拦截器的配置
    <interceptor name="声明的拦截器名称"                         
            class="拦截器路径" />
    <interceptor-stack name="basicStack">给拦截器栈命名
       <interceptor-ref name="exception"/>引用拦截器
       <interceptor-ref name="servletConfig"/>引用拦截器栈
    </interceptor-stack>
 </interceptors>

      <default-interceptor-ref name="defaultStack"/>这个才是具体使用的拦截器

jsp代码[3]

	function goToPage(goPage){
		//因为js代码有要去的页码  可以在js中直接判断
		if(goPage<1){
			alert("当前已经是第一页了  不能上一页");
			return ; 
		}
		//获得最大页数
		var totalPage = '${pageBean.totalPage}';
		if(goPage>totalPage){ //当前页大于 最大页数
			alert("当前已经是最后一页了  不能下一页");
			return ; 
		}
/*  	查看当前页
		var a = '${pageBean.pageNumber}';
		alert(a); 
		*/
		//把页码放在表单中,提交表单即有条件了 
		//指定条件下:点击下一页,给隐藏域赋值,提交表单。
		$("#pageNumberId").val(goPage);
		//提交表单  先获得表单 再提交即可
		$("#customerForm").submit();
	}
=========================================================================================
<TR>
			<TD><SPAN id=pagelink>
				<DIV style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">
							<!-- 共[<B>10</B>]条记录,[<B>1</B>]页
												
							[<A href="#">前一页</A>]
							<B>1</B>
							[<A href="#">后一页</A>]  -->
							共[<B>${pageBean.totalRecord}</B>]条记录,[<B>${pageBean.pageNumber}</B>]页
							[<A href="javascript:void(0)" onclick="goToPage(${pageBean.pageNumber-1})">前一页</A>]
							<B>
							<c:forEach begin="1" end="${pageBean.totalPage}" step="1" var="num">
									<a href="javascript:void(0)" onclick="goToPage(${num})" >
												<font ${num==pageBean.pageNumber ?"color='red'" : ""}>${num}</font>
									</a>
													</c:forEach>
							</B>
							[<A href="javascript:void(0)" onclick="goToPage(${pageBean.pageNumber+1})">后一页</A>]
				</DIV>
			</SPAN></TD>
</TR>

代码[2]

	/*
	 * 客户列表
	 */
	@Action("visitAction_list")
	public String list() {
		//离线对象--拼接条件--放入值栈
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Visit.class);	
		List<Visit> visitsList =visitService.findByCondition(detachedCriteria);	

		ActionContext.getContext().getValueStack().set("visitsList",visitsList);
		return "list";
	}

代码[1]

set从前台拿数据,给属性赋值,

get从服务器接收数据.反显数据     .[封装成private成员变量,同时提供get方法,可以自动放入值栈中。]

     //想要接受参数,定义属性+set方法
	private Long custId;	
	public void setCustId(Long custId) {
		this.custId = custId;
	}
	//用户列表集合[属性驱动,返回list集合 数据:声明属性+get方法]
	private List<Customer> customerList;
	public List<Customer> getCustomerList() {
		return customerList;
	}

猜你喜欢

转载自blog.csdn.net/weixin_39134861/article/details/82385005