crm客户列表及联系人新增中的问题

我在联系人新增页面中,处理联系人所选客户的方法是打开一个新窗口,显示的是客户列表(此处直接调用CustomerAction_list),由用户点击选中所属的客户,如下:

 

显示客户列表的窗口仍然是customer_list.jsp,只不过使用了struts2的标签对最右栏的操作进行了更改,具体实现如下:

linkMan_add.jsp:

设置隐藏域(cust_id用于表单提交,cust_name用于linkMan_add.jsp中的数据回显):

<input type="hidden" name="customer.cust_id" style="WIDTH: 180px" id="cust_id" />
<input type="text" style="WIDTH: 180px" id="cust_name" />

点击选择客户按钮,触发JQuery函数(window.open()),打开一个新窗口,其中url参数为CustomerAction_list,不过为了区分请求是来自客户页面还是联系人页面,在CustomerAction_list后加参数select=true;

<input type="button" value="选择客户" οnclick="window.open('${pageContext.request.contextPath}/CustomerAction_list?select=true','','width=600,height=300')" >

CustomerAction_list:

准备数据,跳转Customer_list.jsp页面

Customer_list.jsp:

设置隐藏域,放置用以区分请求的标记:

<input type="hidden" name="select" id="select" value="<s:property value="#parameters.select" />" >

此标记在form表单内,所以在页面跳转时也会提交,不会出现点击下一页就没有了选择按钮的情况。

在列表的操作栏加入以下代码:

<s:if test="#parameters.select==null">
	<a href="${pageContext.request.contextPath }/CustomerAction_toEdit?cust_id=<s:property value="#cust.cust_id" />">修改</a>
	&nbsp;&nbsp;
	<a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a>
</s:if>
<s:else>
	<input type="button" value="选择" οnclick="selectCustomer(<s:property value="#cust.cust_id" />,'<s:property value="#cust.cust_name" />')" />
</s:else>

 

点击选择按钮触发JS函数,参数为选中客户的id和name:

选择按钮:

<input type="button" value="选择" οnclick="selectCustomer(<s:property value="#cust.cust_id" />,'<s:property value="#cust.cust_name" />')" />

Js代码:

js代码的作用是获得LinkMan_add.jsp页面对象,设置隐藏域内的cust_id(用于数据库提交)和cust_name(用于所选客户回显),然后关闭此窗口

function selectCustomer(cust_id,cust_name){
		//获得添加页面的额Windows对象
		var win=window.opener;
		//获得添加页面的document页面
		var doc=win.document;
		//获得隐藏域和文本框并赋值
		doc.getElementById("cust_id").value=cust_id;
		doc.getElementById("cust_name").value=cust_name;
		//关闭当前窗口
		window.close();		
	}

 

当我完成以上代码后,联系人的添加功能就实现好了,但我回头点进客户列表时,却发现了一个问题:

客户列表第一页显示正常:

 

 

点击第二页时操作栏处发生了bug(客户列表操作栏应为修改和删除):

 

我加入了<s:debug></s:debug>标签调试时发现,在导航栏点击客户列表进入Customer_list.jsp后,传递参数的确为空:

就是上上图所显示的内容,一切正常。

此时Customer_list.jsp隐藏域内的标记参数select为Null

而当我点击下一页时,bug就出现了,页面携带参数也不为null:

 我对传入的select属性在页面弹窗进行了显示,为空。我猜想空表单提交值既然不为NULL,就一定为空,所以我加入了select值的判定:

 alert("<s:property value="#parameters.select==''?'空串':'不是'"/>"); 

 

隐藏域内的html为空提交时,得到的结果既不为null,也不为空串。我甚至用到了trim(),但bug还是没能解决。

经过我一系列的测试,最终得出结论:

即使<s:property value="#parameters.select" />为null,赋值给input标签的value,提交后也不为null,但为啥也不为空串我还不能理解,因为在我的测试demo中,text中什么都不填提交后应该为空串。

但这些对我解决这个bug没有太大帮助,我决定另辟蹊径,最终这么解决的:

<!-- 放置是否需要选择的标记参数 --> 
<s:if test="#parameters.select==null">
											
</s:if>
<s:else>
	<input type="hidden" name="select" id="select" value="<s:property value="#parameters.select" />" >
</s:else>

 

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务