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

从select选项调用窗体的JDBC servlet onload

白泽语
2023-03-14

我有一个JSP页面,其中我包含了使用JDBC进行DB连接的java bean作为选择选项。现在我想使用servlet做同样的事情。JDBC连接代码在Servlet中。JSP页面有一个选择选项,我需要在表单加载时在其中包含数据库值。我已经搜索过,但大多数示例都使用strut和ajax。我还不需要strut,因为它是在表单加载上并且不依赖于选择选项的更改,所以我无法通过它。

JSP页面(相关代码):

<%
//Connectivity code which works, just mentioning setAttribute
 pageContext.setAttribute("authors", rt);
%>  

 <form name="foo">
<td >Shipper</td>
 <td >
<FONT COLOR=WHITE> to </FONT> <select name="database1" style= "width: 150px">
<c:forEach var="item" items="${authors}">
<option>
<c:out value= "${item}" />
</option>
</c:forEach>
</select>
</td>
</form

Servlet:"ZServlet.java"

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ArrayList<String> rt = new ArrayList<String>();
    //Same JDBC connection code as in JSP page beans
     request.setAttribute("authors", rt);
    }

现在,我的疑问是如何在表单加载期间通过将属性作者从servlet接受到select选项来替换bean。

感谢所有的帮助。

共有2个答案

松铭
2023-03-14

这个答案是总结在尝试将数据从servlet转发到JSP页面时代码中缺少的内容:

JSP页面中的相关代码,“索引”。JSP”:

<body>
 <form name="foo">
<table>
<tr>
 <td >Shipper</td>
<td >
<FONT COLOR=WHITE> to </FONT> 
<select name="database1" style= "width: 150px">
<c:forEach var="item" items="${authors}">
<option>
<c:out value= "${item}" />
</option>
</c:forEach>
</select>
</td>
</tr>
</form>
</body>

servlet中的相关代码:

public class ZServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

//JDBC Connection code, not relevant here.

ArrayList<String> rt = new ArrayList<String>(); /*"rt" holds string of column data spooled during JDBC connection*/

 request.setAttribute("authors", rt);   

 RequestDispatcher view = request.getRequestDispatcher("Index.jsp");
                 view.forward(request, response);

} //Servlet "ZServlet" ends.

web.xml相关的一段代码,在标签中:这是缺失的,我不得不手动添加它:

<servlet>
          <servlet-name>ZServlet</servlet-name>
          <jsp-file>/Index.jsp</jsp-file>
    </servlet>

当做

戚高洁
2023-03-14

只需首先调用Servlet,将作者列表设置为请求属性,然后将请求转发给JSP。

Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ArrayList<String> rt = new ArrayList<String>();
    //Same JDBC connection code as in JSP page beans

    request.setAttribute("authors", rt);
    RequestDispatcher view = request.getRequestDispatcher("authors.jsp");
    view.forward(request, response);
}

JSP:

<form name="foo">
    <table>
        <tr>
            <td>Shipper</td>
            <td><FONT COLOR=WHITE> to </FONT> 
                <select name="database1" style="width: 150px">
                    <c:forEach var="item" items="${authors}">
                        <option>
                            <c:out value="${item}" />
                        </option>
                    </c:forEach>
                </select>
            </td>
        </tr>
    </table>
</form>

首先调用Servlet表单JSP,将作者设置为请求属性并在JSP中读取它。

Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ArrayList<String> rt = new ArrayList<String>();
    //Same JDBC connection code as in JSP page beans
    request.setAttribute("authors", rt);
}

JSP:

<jsp:include page="/authorsServlet" />

<form name="foo">
    <table>
        <tr>
            <td>Shipper</td>
            <td><FONT COLOR=WHITE> to </FONT> 
                <select name="database1" style="width: 150px">
                    <c:forEach var="item" items="${authors}">
                        <option>
                            <c:out value="${item}" />
                        </option>
                    </c:forEach>
                </select>
            </td>
        </tr>
    </table>
</form>

JQuery是异步加载数据的好方法,可以带来更好的用户体验。在上述两种解决方案中,整个JSP页面将不会加载,除非Servlet没有返回响应,该响应会增加生成用户界面的延迟。

这是非常简单的代码。只需在Servlet中以逗号分隔的形式在响应流中写入作者姓名,并在返回响应时在JSP中将其拆分。

示例代码:(阅读内联注释以获取更多信息)

Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ArrayList<String> rt = new ArrayList<String>();
    //Same JDBC connection code as in JSP page beans

    PrintWriter writer=response.getWriter();
    writer.print(<comma separated list of author names>);
    writer.flush();
    writer.close();
}

JSP:

<script type="text/javascript">
    $(document).ready(function() { // When the HTML DOM is ready loading, then execute the following function...
        // Handler for .load() called.
        $.get('servletURL', function(response) { // Execute Ajax GET request on URL of "someservlet" and execute the following function with Ajax response...
            alert(response);
            var $select = $('#database1'); // Locate HTML DOM element with ID "someselect".
            $select.find('option').remove(); // Find all child elements with tag name "option" and remove them (just to prevent duplicate options when button is pressed again).
            var items = response.split(',');

            for ( var i = 0; i < items.length; i++) {
                $('<option>').val(items[i]).text(items[i]).appendTo($select); // Create HTML <option> element, set its value with currently iterated key and its text content with currently iterated item and finally append it to the <select>.
            }
        });
    });
</script>

<form name="foo" id="foo">
    <table>
        <tr>
            <td>Shipper</td>
            <td><FONT COLOR=WHITE> to </FONT> <select id="database1"
                style="width: 150px">
            </select></td>
        </tr>
    </table>
</form>
 类似资料:
  • 我有两个表单:表单1和表单2。comboBox在表单2中。我正在尝试将一个项目添加到表单1中的comboBox选项列表中。这是我迄今为止所做的尝试。 这个的问题是它不让我选择项目。(它不让我输入项目。添加) 我还试图通过点击表单中的comboBox并将私有更改为公共来公开它。这是我更改它时的样子。 但当我尝试访问时,我得到的只有: 我可能犯了很多错误,但那是因为我对此很陌生。我刚刚开始学习,所以如

  • 我是新来的蟒蛇。我真的很想知道如何从SELECT中获得我的选项。在下面列出的情况下,我想选择select标记的第一个选项。 我尝试了很多方法,但都失败了。当前错误为“元素当前不可见,可能无法操作”。使用索引不会出错,但不会显示任何内容 没有打印源代码的输出如下所示: 这是网站的源代码 我注意到,实际上它设法检测选择的所有8个选项,但就在尝试更新选项时,出现了一些错误。 更具体地说,错误是(万一有用

  • 问题内容: 我试图在选择元素中选择一个值。我正在使用Selenium RC(Java)运行测试用例。我了解选择值的代码由以下代码给出: 我无法使用上面的代码选择所需的值。我认为这可能与选择源代码中的optgroup有关。我没有任何异常,该命令执行得很好,但是在页面上未选择所需的值。另外,我不能使用ID(而不是值),因为那里没有任何ID。这是选择器的源代码: 有什么方法可以使用Selenium选择所

  • 本文向大家介绍jQuery实现iframe父窗体和子窗体的相互调用,包括了jQuery实现iframe父窗体和子窗体的相互调用的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现iframe父窗体和子窗体的相互调用方法。分享给大家供大家参考,具体如下: 父窗体 子窗体 更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery常用插件及用法总结》、《jquery中A

  • 本文向大家介绍C# Winform选项卡集成窗体详解,包括了C# Winform选项卡集成窗体详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C# Winform选项卡集成窗体的具体代码,供大家参考,具体内容如下 知识要点:利用反射动态的加载窗体到对应的TabPage的。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我正在学习AngularJS并尝试实现一个表单。我有一个select元素,我希望能够根据所选文本更改所选值的颜色。 HTML: CSS: 但这不起作用。这里的问题是什么? EDIT1:默认选项在选中时应该是灰色的,甚至在用户打开下拉列表时也应该是灰色的。Rest其他选项应该在两个条件下都有其黑色文本(在选择和下拉列表显示)。 提前道谢。