如何使用Spring MVC更新当前用户数据? [英] How to use Spring MVC to update current user data?
问题描述
我是学习Spring MVC的初学者,现在我有一个无法解决的问题.我花了很多时间想用Spring MVC更新当前的用户数据,但是总是绕圈走.
I'm beginner to learn spring MVC, Now I have a problem can't solve. I spent a lot of time want to use Spring MVC to update current user data,but always go round in circles.
例如,登录用户为[test2],我想更新mAccount和mPassword,如何获取登录会话并单击jsp表格进行更新.我该怎么办?(mId是主键)
Eclipse控制台消息: 在此处输入图片描述
eclipse调试模式消息: 在此处输入图片描述
Bean:
private Integer mId;
private String mAccount;
private String mPassword;
private String mName;
private Date mDate;
private String mPhone;
private String mAddress;
private String mGender;
private String mEmail;
MemberController:
MemberController:
@Autowired
MemberService memberservice;
@Autowired
ServletContext context;
@RequestMapping(value = "/checklogin", method = RequestMethod.POST)
public String Login(HttpSession session, HttpServletRequest request) {
MemberBean mb = null;
Map<String, String> errorMsgMap = new HashMap<String, String>();
session.setAttribute("errorMsgKey", errorMsgMap);
String mAccount = request.getParameter("mAccount");
String mPassword = request.getParameter("mPassword");
try {
mb = memberservice.checkPassword(mAccount, mPassword);
if (mb != null) {
session.setAttribute("LoginOK", mb);
} else {
errorMsgMap.put("LoginError", "帳號不存在或密碼錯誤");
}
} catch (RuntimeException e) {
errorMsgMap.put("LoginError", e.getMessage());
}
if (errorMsgMap.isEmpty()) {
} else {
return "login/login";
}
return "index";
}
@RequestMapping(value = "/register/add", method = RequestMethod.GET)
public String getRegisterData(Model model) {
MemberBean mb= new MemberBean();
model.addAttribute("MemberBean",mb);
return "register/register";
}
@RequestMapping(value = "/register/add", method = RequestMethod.POST)
public String porcessAddNewRegistertoForm(@ModelAttribute("MemberBean")MemberBean mb, BindingResult result) {
memberservice.registerMember(mb);
return "index";
}
@RequestMapping(value = "/UpdateMemberForm", method = RequestMethod.GET)
public String AddLoginMemberBeantoUpdateForm(Model model) {
MemberBean mb = new MemberBean();
model.addAttribute("MemberBean", mb);
return "register/updateMember";
}
@RequestMapping(value = "/UpdateMemberForm", method = RequestMethod.POST)
public String UpdateMember(@ModelAttribute("MemberBean")MemberBean mb, BindingResult result ) {
memberservice.updateMember(mb);
return "index";
}
MemberDao:
MemberDao:
public void setConnection(Connection conn);
public boolean checkAccount(String mAccount);
public int registerMember(MemberBean mb);
public MemberBean queryMember(String mAccount);
public MemberBean checkPassword(String mAccount, String mPassword);
public void updateMember(MemberBean mb);
MemberDaoImpl:
MemberDaoImpl:
@Override
public boolean checkAccount(String mAccount) {
boolean exist = false;
String sql = "FROM MemberBean m WHERE m.mAccount=:mid";
Session session = factory.getCurrentSession();
try {
MemberBean mb = (MemberBean) session.createQuery(sql).setParameter("mid", mAccount).uniqueResult();
if (mb != null) {
exist = true;
}
} catch (NoResultException ex) {
exist = false;
} catch (NonUniqueResultException ex) {
exist = true;
}
return exist;
}
@Override
public int registerMember(MemberBean mb) {
int n = 0;
Session session = factory.getCurrentSession();
session.save(mb);
n++;
return n;
}
@Override
public MemberBean queryMember(String mAccount) {
MemberBean mb = null;
Session session = factory.getCurrentSession();
String sql = "FROM MemberBean m WHERE m.mAccount=:mid";
try {
mb = (MemberBean) session.createQuery(sql).setParameter("mid", mAccount).uniqueResult();
} catch (NonUniqueResultException ex) {
mb = null;
}
return mb;
}
@Override
public MemberBean checkPassword(String mAccount, String mPassword) {
MemberBean mb = null;
Session session = factory.getCurrentSession();
String sql = "FROM MemberBean m WHERE m.mAccount=:mid and m.mPassword=:pswd";
try {
mb = (MemberBean) session.createQuery(sql).setParameter("mid", mAccount).setParameter("pswd", mPassword)
.uniqueResult();
} catch (NoResultException ex) {
mb = null;
}
return mb;
}
@Override
public void updateMember(MemberBean mb) {
String hql="UPDATE MemberBean mb SET mb.mAccount = :mAccount mb.mPassword = :mPassword WHERE mId = :mId";
Session session = factory.getCurrentSession();
session.createQuery(hql).setParameter("mAccount", mb.getmAccount()).setParameter("mPassword", mb.getmPassword())
.setParameter("mId", mb.getmId()).executeUpdate();
}
}
MemberService:
MemberService:
boolean accountCheck(String mAccount);
int registerMember(MemberBean mb);
MemberBean queryMember(String mAccount);
public MemberBean checkPassword(String mAccount, String mPassword);
void updateMember(MemberBean mb );
MemberSeriveImpl:
MemberSeriveImpl:
@Transactional
@Override
public void updateMember(MemberBean mb) {
if (mb.getmAccount() != null && mb.getmPassword() != null) {
dao.updateMember(mb);
}
}
updateMember.jsp:
updateMember.jsp:
<form:form method="POST" modelAttribute="MemberBean">
<table>
<tr>
<td>帳號:</td>
<td><form:input id="mAccount" path="mAccount" type="text" value="${MemberBean.mAccount}"
size="10"/>
</td>
</tr>
<tr>
<td>密碼:</td>
<td><form:input id="mPassword" path="mPassword" type="text" value="${MemberBean.mPassword}"
size="10"/>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="更新" >
</td>
</tr>
</table>
</form:form>
推荐答案
这是语法错误,原因是=
和:
之间存在空格,因此请通过删除空格将查询更改为以下内容.
This is syntax error due to space between =
and :
so change query to below by removing space.
SET mb.mAccount =:mAccount mb.mPassword =:mPassword WHERE mId =:mId
更新:
您缺少mb.mAccount =:和mb.mPassword之间的逗号
You are missing comma between mb.mAccount =: and mb.mPassword
这篇关于如何使用Spring MVC更新当前用户数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!