как избежать пустой строки при обновлении полей формы пользователя в базе данных с помощью Spring и Hibernate - PullRequest
0 голосов
/ 23 марта 2012

Я новичок в весне с hibernate. После того, как пользователь вошел в систему, у меня есть требование обновить имя пользователя, пароль, emailId, когда пользователь захочет изменить эти поля. Но здесь пользователь может изменить любое поле, например, он может изменить emailIdи он оставил пароль и имя пользователя пустыми строками ... но в сервисе я хочу обновить только те поля, которые он дает значения в базе данных, если он оставляет пустое поле любого поля, я хочу избежать этого поля (но это обновление пустой строки вбаза данных). Я не уверен все время, какое поле он хочет изменить, т.е. все поля или любое из них. Любой может подсказать мне, как выполнить это требование.заранее спасибо.

Вот файл jsp:

  <%
  String path=request.getContextPath();
  %>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">`enter code here`
   <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>Untitled Document</title>
  <link href="<%=path %>/css/style.css" rel="stylesheet" type="text/css" />
 </head>

   <body>
  <form action="modifyUser.htm" method="get">
   <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0" 
  class="fields">
 `enter code here`<tr>
   <td width="33%">User Name <span class="star"></span></td>
  <td width="67%"><input name="userName" type="text" /></td>
  </tr>
  <tr>
   <td>Password</td>
   <td><input name="password" type="password" /></td>
  </tr>
  <tr>
  <td height="35">Email ID </td>
  <td><input name="emailId" type="text" /></td>
  </tr>
  <tr>
  <td>&nbsp;</td>
   <td align="left"><input type="image" src="<%=path %>/images/update.png" height="2 5" 
        `width="65" /></td>
     </tr>
    </table>
       </form>
       </body>
         </html>

здесь основной контроллер:

public class MainController {

    @RequestMapping("/modifyUser.htm")
    public ModelAndView updateUser(@RequestParam String userName,@RequestParam String password,@RequestParam String emailId,HttpSession session)throws Exception{
        User user=null;
        try{
            user=(User)session.getAttribute("userSession");
            if(userName.equalsIgnoreCase(currentUserName)){
                System.out.println("i'm in same username case");
                user.setUserPassword(password);
                user.setUserEmailId(emailId);
                userService.updateUser(user);
                return new ModelAndView("user_management","message","user_modified");
            }else if(userService.isUserNameValid(userName)){    
                System.out.println("here username also changing 2nd case");
                user.setUserName(userName);
                user.setUserPassword(password);
                user.setUserEmailId(emailId);
                userService.updateUser(user);
                return new ModelAndView("user_management","message","user_modified");
            }else {
                System.out.println("case failed to update user");
                return new ModelAndView("external2","message","invalid_username");
            }
        }catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
            logger.error("in updating a user with username:"+userName+" ",e);
            return new ModelAndView("error","message",e);
            // TODO: handle exception
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 23 марта 2012

Просто загрузите поля, которые пользователь пропустил из базы данных.Тогда вы сможете снова сохранить весь свой (сопоставленный ORM) объект домена.

0 голосов
/ 23 марта 2012

Вы можете использовать встроенный интерфейс валидатора Spring.

http://static.springsource.org/spring/docs/2.5.x/reference/validation.html

0 голосов
/ 23 марта 2012

Есть более элегантные способы сделать то, что вы делаете (например, с помощью элемента form пружины: http://static.springsource.org/spring/docs/3.0.x/reference/htmlsingle/#view-jsp-formtaglib)

Но для этого кода, который вы разместили, вы можете сделать это:

if (org.springframework.util.StringUtils.hasText(password)){
    user.setUserPassword(password);
}

То же самое относится и к другим полям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...