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>
<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>