当前位置:编程学习 > JAVA >>

ssh程序 一个奇怪的BUG 求教

小弟最近在写个OA管理系统 用S2SH框架写的,
其中有一个功能是管理员添加账户。
然后我添加完成后,不知道怎么搞的,之前保存在SESSION中的当前用户,就突然变成了刚添加的,把SESSION里的值替换了。
如果说是逻辑上有问题,有的时候确是正常的,但正常的次数很少。不知道什么原因?研究好几天了。

<s:property value="#session.employee.nickname" /> // 每个页面都有这行代码,我的问题就是添加账户成功后,这里的值应该是不变的,可是变了!!很纠结啊  
<!-- 业务显示页面 -->
<div class="pages" id="editinfo" style="display: none;">
<s:form action="employeeAdd" namespace="/" onsubmit="return check()">

<table width="90%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" width="30%">

账号:
</td>
<td align="left">
<s:textfield name="employee.empId" value="" id="empid" onblur="checkempid()"/>   
</td>
<td align="left" width="45%"><span id="empidmsg">*</span></td>

</tr>
<tr>
<td align="right" width="30%" >
密码:
</td>
<td align="left">

<s:password name="employee.password " value="" id="pass" onblur="checkpass()"/>

</td>
<td align="left" width="45%"><span id="passmsg">*</span></td>
</tr>
<tr>
<td align="right" width="30%">

昵称:
</td>
<td align="left">
<s:textfield name="employee.nickname" value="" id="nick" onblur="checknick()"/>   
</td>
<td align="left" width="45%"><span id="nickmsg">*</span></td>

</tr>


<tr>
<td align="right" width="30%">

年龄:
</td>
<td align="left">
<s:textfield name="employee.age" value="" onblur="checkage()" id="age"/>   
</td>
<td align="left" width="45%"><span id="agemsg"></span></td>

</tr>


<tr>
<td align="right" width="30%">

性别:
</td>
<td align="left">
<s:radio list="#{'男':'男','女':'女'}" name="employee.sex"/>
</td>
<td></td>

</tr>

<tr>
<td align="right" width="30%">

手机:
</td>
<td align="left">
<s:textfield name="employee.phone" value="" id="phone" onblur="checkphone()"/>   
</td>
<td align="left" width="45%"><span id="phonemsg">*(手机号码必须为11为数字,并且开头为13,18...)</span></td>

</tr> 

<tr>
<td align="right" width="30%">

地址:
</td>
<td align="left">
<s:textfield name="employee.address" value=""/>   
</td>
<td></td>

</tr>
<tr>
<td align="right" width="30%">

权限:
</td>
<td align="left">
<s:radio list="#{0:'普通账户', 1:'admin'}" name="employee.authority"/>
</td>
<td></td>

</tr>


<tr>
<td align="center" colspan="3">
<br />

<s:submit value="保存" onclick="return confirm('确定添加吗?');"/>
<input type="button" value="返回" id="return"/>
</td>
</tr>

</table>
  </s:form>
</div>


============================action中===================
//个人信息
public String employeeInfo(){
return SUCCESS;
}

//个人信息修改
public String employeeInfoEdit(){

employeeDao.edit(employee);
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("employee", employeeDao.getById(employee.getEmpId()));

return SUCCESS;
}
//注销
public String LoginOut(){
HttpSession session = ServletActionContext.getRequest().getSession();
session.removeAttribute("employee");
return SUCCESS;
}

//个人账户
public String employeeOneself(){

return SUCCESS;
}
//个人账户修改



//管理账户
public String employeeManager(){
this.list=employeeDao.getList();
return SUCCESS;
}

//添加账户 *********************目前就是执行这条语句有问题。
public String employeeAdd(){
employeeDao.addEmployee(this.getEmployee());
return SUCCESS;
}

//登录
public String employeeLogin() throws Exception {
Employee loginEmp= employeeDao.login(employee.getEmpId(), employee.getPassword());
if (loginEmp != null) {
this.setEmployee(loginEmp);
HttpSession session = ServletActionContext.getRequest().getSession(true);
session.setAttribute("employee", loginEmp);
System.out.println(loginEmp.getNickname());
  return SUCCESS;
} else {
this.setMessage("用户名或密码错误!");
return ERROR;
}

}
=========================== DAO层======
//添加账户
public void addEmployee(Employee employee) {
this.getHibernateTemplate().save(employee);

}

=================struts.xml=================
<!-- 登录 个人信息 权限管理 -->
<action name="employeeLogin" class="employeeAction" method="employeeLogin">
<result>/employeeInfo.jsp</result>
<result name="error">/login.jsp</result>
<interceptor-ref name="defaultStack"/>
</action>

<!--个人信息 -->
<action name="employeeInfo" class="employeeAction" method="employeeInfo">
<result>/employeeInfo.jsp</result>
</action>

<!-- 修改个人信息 -->
<action name="employeeInfoEdit" class="employeeAction" method="employeeInfoEdit">
<result>/employeeInfo.jsp</result>
</action>

<!-- 修改个人账户 -->
<action name="employeeOneselfEdit" class="employeeAction" method="employeeInfoEdit">
<result>/employeeOneself.jsp</result>
</action>

<!-- 添加账户-->
<action name="employeeAdd" class="employeeAction" method="employeeAdd">
<result name="success" type="redirect">/employeeManager</result>
<result name="input">/employeeManager.jsp</result>
</action> 

<!-- 注销-->
<action name="employeLoginOut" class="employeeAction" method="LoginOut">
<result>/login.jsp</result>
</action> 

<!-- 个人账户-->
<action name="employeeOneself" class="employeeAction" method="employeeOneself">
<result>/employeeOneself.jsp</result>
</action>

<!-- 管理账户-->
<action name="employeeManager" class="employeeAction" method="employeeManager">
<result>/employeeManager.jsp</result>
</action>







 
--------------------编程问答-------------------- 这样的情况,可以考虑在各个步骤获取SESSION中的用户值,断点一步步缩小改变值的方法。。 --------------------编程问答-------------------- 然后我添加完成后,不知道怎么搞的,之前保存在SESSION中的当前用户,就突然变成了刚添加的,把SESSION里的值替换了。
之所以改变是因为你保存的session是相同的,用到同一个emplyee;比如:在登录用session.setAttribute("employee", loginEmp)保存,之后你添加又用session.setAttribute("employee", loginEmp);保存,,你在检查一下,避免冲突 --------------------编程问答-------------------- 【跪求】下列对于Java序列化作用的解释 不正确的是()

A永久性保存对象 保存对象的字节序列到本地文件中
B通过序列化对象在网络中传递对象
C通过序列化在进程间传递对象
D通过序列化能使Java程序顺序进行


--------------------编程问答-------------------- http://happyran.zbpifa.com
http://007ej.com/user.asp

--------------------编程问答-------------------- 问题已经解决,只要不把ACTION的方法 剂在一个类里就行了 --------------------编程问答--------------------
引用 5 楼 zhengguoguo0331 的回复:
问题已经解决,只要不把ACTION的方法 剂在一个类里就行了

???  LZ 的 是什么意思?  和 方法有什么关系吗? --------------------编程问答-------------------- 我的意思是 原先我所有增删改查的ACTION 都在同一个ACTION类里写不同的方法,代码很臃肿,现在我把添加用户这个操作单独写了个ACTION类 那个情况就没有了 我也解释不了。呵呵
--------------------编程问答-------------------- Spring默认的创建模式是单例的,LZ的问题很有可能是因为action是单利的,所以出现了共享数据混乱。

只要把spring管理的action类的创建模式改了就可以了
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,