Как заполнить поле выбора на странице jsp значениями в базе данных, а также показать их значения в том виде, в котором они были выбраны, если данные отправлены сервлетом обратно в вызывающий jsp?

Я новичок в области бобов JSP, Servlet и Java. Я работаю над файлом JSP, который содержит HTML-форму, которая создает группы пользователей. Я пытаюсь разработать эту форму, используя модель MVC. Эта форма содержит 2 текстовых поля и 2 поля выбора. Из этих полей выбора вы можете выбрать несколько значений в одном поле выбора, которое содержит пользователей. Каждый раз при первом обращении к странице JSP это поле выбора пользователя будет заполнено

имена пользователей, которые выбираются из базы данных. Функциональность форм примерно такая, что при отправке формы вызывается сервлет, упомянутый в методе действия формы. Этот сервлет проверяет, существует ли пользователь в базе данных или нет. Если группа

имя не существует в базе данных, тогда имя группы и другие данные формы будут сохранены в базе данных, а атрибут ответа отправляется обратно на страницу jsp со значением "Success". Если имя группы уже существует, отправляется атрибут ответа

вернуться на страницу jsp со значением "duplicate", а остальные данные формы также отправляются обратно на страницу jsp, так что эти данные формы будут заполнены обратно в форму.

Вот мой код файла JSP.

<%@ page import="java.util.*" %>
<jsp:useBean id="objbean" class="com.techspeed.user.CreateUserBean" />
<jsp:useBean id="objdao" class="com.techspeed.user.CreateUserDAO" />
<head>
   <title>Untitled Document</title>
</head>

<body>
   <%
      if (null != request) {
         if (request.getAttribute("reply") != null) {
            if (request.getAttribute("reply").toString().equalsIgnoreCase("Duplicate")) {
               out.println("The entered Username is already exists!");
            } else if (request.getAttribute("reply").toString().equalsIgnoreCase("failed")) {
               out.println("User creation process terminated due to technical fault. Please try again later!");
            } else {
               out.println("The User created successfully!");
            }
            //out.println(request.getAttribute("reply"));
         }
      }
   %>
   <form name="creategroupform" method="post" action="Creategroup">
      <table width="422" border="0" align="center" cellpadding="2" cellspacing="2" bgcolor="#FFFFFF">
         <tr>
            <th width="128" nowrap scope="col">&nbsp;</th>
            <th width="280" scope="col">&nbsp;</th>
         </tr>
         <tr>
            <th nowrap scope="col">&nbsp;</th>
            <th scope="col">&nbsp;</th>
         </tr>
         <tr>
            <th nowrap scope="col">
         <div align="left" class="grayBodyText style14">
            Group Name : 
         </div>
         </th>
         <th scope="col"><div align="left">
            <input type="text" name="username" value="">
         </div></th>
         </tr>
         <tr>
            <td>Description<span class="style14">: </span></td>
            <!--I used JSTL to fill the value sent by servlet  -->
            <td><input type="text" name="lname" value=${lname}></td> 
         </tr>
         <tr>
            <td><span class="style14">Group Type :</span></td>
            <td>
               <select name="role">
                  <!-- 
                  Here the JSTL is used to show a value as selected in 
                  select box which was selected by the user when form is submitted.
                  -->
                  <option value="Beginner" ${role == Beginner ? 'selected' : ''}>
                     Beginner
                  </option> 
                  <option value="Moderate" ${role == Moderate ? 'selected' : ''}>
                     Moderate
                  </option>
                  <option value="Expert" ${role == Expert ? 'selected' : ''}>
                     Expert
                  </option>
               </select>                          </td>
         </tr>
         <tr>
            <td><span class="style14">List Of Users: </span></td>

            <!-- Major problem starts here below -->
            <td><select name="groups" size="5" multiple>
                  <%
                     //objbean=objdao.createHtmlOptionList(objbean);
                     //out.println(objbean.getHtmGroupOptionList());
                     System.out.println("REached here!");

                     // This calls to getGroupList of method of DAO class which 
                     // retrives username and there unique userids from 
                     // database and stores in MAP collection of bean class.
                     if (request.getAttribute("reply") == null
                             || request.getAttribute("reply").toString().equalsIgnoreCase("success")) {
                        objdao.getUserList(objbean);
                        System.out.println("REached inside if!");
                  %>
                  <jsp:getProperty name="objbean" property="htmUseroptionList" />
                  <!-- 
                  In this JSTL the htmGroupOptionList property is a string 
                  variable name in bean class   which contains the 
                  preconstructed html code of <Options> haveing 
                  userid as value and username as name in Map collection Which 
                  gets constructed in above call to function getGroupList of 
                  DAO class getGroup. As per my thought this if block is gets 
                  executed whenever there is a fresh call given to this jsp 
                  page and when the reply attribute of the 
                  servlet contains value as "success" 
                  -->
                  <%
                     } else {
                        /* As per my thought this else block is get invoked 
                         whenever the reply attribute send by the servlet 
                         contains value as "Duplicate" of "Failed"  As per my 
                         thought this if block is gets executed whenever there 
                         is a fresh call given to this jsp page and when the 
                         reply attribute of the servlet contains value as "success" */
                        if (!(request.getAttribute("reply").toString().equalsIgnoreCase("success"))) {
                           objdao.getUserList(objbean);
                           // This Map have the list of userid as key and 
                           // username as value. This map is get filled from Database.
                           Map<Integer, String> userMap
                                   = (Map<Integer, String>) objbean.getUserList();
                           // This list contains the list of selected username 
                           // by the user before submitting the form.
                           ArrayList<String> lstSelUser
                                   = (ArrayList<String>) request.getAttribute("selUser");
                           String strSel = "";
                           for (Integer key : UserMap.keySet()) {

                              for (int i = 0; i < lstSelUser.size(); i++) {
                                 if (key.toString().equalsIgnoreCase(lstSelUser.get(i))) {
                                    strSel = "selected=\"selected\"";
                                    break;
                                 } else {
                                    System.out.println("not selected");
                                    strSel = "";
                                 }
                              }
                              out.println("<option value=" + key.toString() + " "
                                      + strSel + ">" + userMap.get(key) + "</option>");
                           }
                        }
                     }
                  %>                             
               </select></td>
         </tr>
         <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
         </tr>              <tr>
            <td>&nbsp;</td>
            <td><input type="submit" name="submit" value="Submit">
               <input type="reset" name="reset" value="Reset">
               <!--<input type="reset" name="" value="Cancel"> -->
            </td>
         </tr>
      </table>
   </form>

</body>
</html>

в соответствии с приведенным выше кодом на странице JSP и упомянутых комментариев у меня есть следующие сомнения и вопросы по этому поводу.

  • Как вы видите, я написал некоторый код для заполнения поля выбора пользователя при первом вызове страницы jsp и при отправке элемента управления обратно на страницу jsp из сервлета. Этот код содержит код Java. Я думаю, что это решение для заполнения поля выбора пользователя не подходит для кодирования в соответствии с шаблоном MVC, т. Е. Не является правильным дизайном кода. Я читал, что писать код Java в jsp не очень хорошая практика. Как сделать это кодирование коротким и оптимальным?

  • Найдите строки с номерами 2 и 3 в коде jsp, т. Е. Тег пользователя jsp. Объект, созданный с использованием этого тега, используется только для заполнения поля списка пользователей. Я думаю, что это также не оптимальное кодирование. Как сделать это кодирование коротким и оптимальным?

  • Когда введенное имя группы уже существует в базе данных, сервлет устанавливает все данные в качестве атрибута для объекта запроса и с помощью диспетчера запросов перенаправляет его на страницу jsp, но здесь, когда страница jsp отображается браузером с предварительно заполненной формой, если вы проверяете URL в адресной строке это не показывает имя страницы JSP в URL. Показывает имя сервлета. Так как же вернуть имя jsp обратно в адресную строку?

  • Есть ли какая-либо ссылка в Интернете, которая дает информацию о коде и информации о проблемах с реальными словами и примеры, подобные приведенным выше, для начинающих?

Мне нужны некоторые рекомендации и предложения от ваших опытных людей, чтобы решить эту проблему. Пожалуйста, направьте меня в этой проблеме.

Благодарю вас

1 ответ

  1. Вы можете использовать MVC Framework как Struts и связать все свои свойства с моделью. Затем, когда вы отобразите свой комбинированный список, значение будет автоматически установлено на вашей модели.
  2. Как указано выше.
  3. Вы можете использовать перенаправление вместо переадресации, но это зависит от требований.
  4. Поиски Struts или Spring MVC.
Другие вопросы по тегам