当前位置: 首页 > 知识库问答 >
问题:

如何在jsp页面中的选择框中填充数据库中的值以及显示其值,如果servlet将数据发送回调用jsp?

梁丘安晏
2023-03-14

我是JSP、servlet和JavaBean领域的初学者。我正在开发一个JSP文件,其中包含一个HTML表单,用于创建用户组。我正在尝试使用MVC开发这个表单。

此表单包含2个文本框和2个选择框。从这些选择框中,您可以选择多个值—一个包含用户的选择框。每当第一次调用JSP页面时,这个用户选择框就会被从数据库中获取的用户名填充。

每当表单提交时,它都会调用表单动作方法中提到的servlet。这个servlet检查用户是否已经存在于数据库中。

>

  • 如果组名在数据库中不存在,则组名和其他表单数据将被保存,并将回复属性发送回值为“成功”的JSP页面。

    如果组名已经存在,则将回复属性发送回JSP页面,值为“重复”,其余表单数据也将发送回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页面以及从servlet将控件发送回JSP页面时填充用户选择框。此代码包含Java代码。我认为这种填充用户选择框的解决方案不适合按照MVC模式进行编码,也就是说,它不是一种合适的代码设计。我已经读到用JSP编写Java代码不是一个好做法。如何解决这个问题,避免JSP中的Java代码,从而遵守MVC模式规则?

    关于JSP页面的userbean标记(第2行和第3行),使用该标记创建的对象仅用于填充userlist框。我认为这也不是最佳编码。我如何使这个编码简短而优化?

    如果输入的组名已经存在于数据库中,则servlet将所有数据设置为请求对象的属性,并使用请求调度程序将其转发到JSP页面,但在这里,当JSP页面以预填充形式显示时,如果您在地址栏中检查URL,则其不会在URL中显示JSP页面名称。它显示servlet名称。那么,如何在地址栏中恢复JSPname呢?

    互联网上有没有任何链接可以为初学者提供关于代码设计信息的信息,包括真实的文字问题和上述示例?

  • 共有1个答案

    长孙景焕
    2023-03-14
    1. 您可以将MVC框架用作Struts并将您的所有属性与模型绑定。然后当您显示组合框时,该值将自动从您的模型中设置。
    2. 如上。
    3. 您可以使用重定向而不是转发,但这取决于要求。
    4. 搜索Struts或Spring MVC。
     类似资料:
    • 问题内容: 我想使用illuminate \ html创建一个如下所示的选择框: 在我的控制器中,我尝试了以下操作: 我认为: 问题是,不是显示实体的所有信息。 问题答案: Laravel为查询生成器提供带有list()函数 就您而言,您可以替换代码 与 另外,您也可以将其与其他查询生成器链接在一起。 来源:http : //laravel.com/docs/5.0/queries#selects

    • 所以,数据库(MySQL)中有一个包含姓名和照片(blob)的表。在我的网页应用程序的主页上有一个按钮,点击它后-它必须是另一个页面,包含数据库的所有结果。我使用servlet/jsp/、jdbc和MVC模式,我有带有字段名称和照片(字节[])的实体User,我有返回List的DAO类,我想在结果页面上从数据库中检索每个用户照片和照片附近的他的名字。 如何使用 servlet/jsp 执行此操作?

    • 数据库中有以下数据。我想通过使用servlet和ajax填充这些数据来填充文本字段。 数据id------------------字符(30) Lat------------------双精度 Long------------------双精度 信息。班 获取数据。班 大众化。班 指数jsp 我基本上是在jsp页面上使用servlet和ajax填充表中的数据库数据,而不刷新页面。我希望采取同样的行

    • 我不熟悉JSP和Servlet。在接下来的任务中,我需要你的建议。我有一个jsp页面,它有一个html表单,可以接受来自用户的一些信息。 JSP页面info.jsp 当此客户端输入信息并提交表单时,表单中的数据被设置为actionservlet,检查用户输入的用户名是否已经存在于数据库中。如果用户名已经存在,则它会将数据发送回调用jsp,并带有一个额外的属性“回复”和值作为适当的消息。即,如果输入

    • 问题内容: 我在JSP中创建了一个表单,用于在derby中将数据插入数据库中,但是它不起作用。 数据库名称为CUSTOMER。表格: client.jsp的内容: client.java的内容。 databaseConnection的内容。 编辑 错误信息: 编辑2 问题答案: 您的prepareStatement索引应该从1开始,而不是从2开始,因此请尝试 PreparedStatement或C

    • 我正在创建一个web应用程序,您必须从数据库中读取对象/实体的列表,并将其填充到JSF