如何将这个DROPDOWN菜单代码分成servlet,dao和JSP?

时间:2016-02-13 05:31:04

标签: jsp servlets

我想避免在jsp文件中使用java代码。但我无法找到解决方案。谁能帮我?

JSP文件:

<select>
<%
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="sys as sysdba";
String password="sys";
String query="select lecturerFullname from lecturer";
Connection con=DriverManager.getConnection(url,username,password);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(query);
while(rs.next())
{

%>

    <option><%=rs.getString("lecturerFullname") %></option>

        <%

}
%></select>
    </table>
    <%
    rs.close();
    stmt.close();
    con.close();
    }
catch(Exception e)
{
    e.printStackTrace();
    }




%></select>

这是我试过的...... getAttribute() returns null for drop down list in jsp但我仍然无法找到解决方案。我必须使用JSTL吗?我可以避免使用JSTL嘿嘿......我真的希望有人帮助我。谢谢!!!!

3 个答案:

答案 0 :(得分:0)

例如:

讲师POJO课程:

class Lecturer {

    ...
    private String fullName;
    ...

   //getters and setters
}

DAO课程:

class MyDAO {

   public List<Lecturer> getLecturers() {
     try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String url="jdbc:oracle:thin:@localhost:1521:xe";
        String username="sys as sysdba";
        String password="sys";
        String query="select lecturerFullname from lecturer";
        Connection con=DriverManager.getConnection(url,username,password);
        Statement stmt=con.createStatement();
        ResultSet rs=stmt.executeQuery(query);

        List<Lecturer> list = new LinkedList<Lecturer>();

        while(rs.next()) {
            String fullname= rs.getString("lecturerFullname");
            Lecturer lec = new Lecturer();
            lec.setFullName(fullname);
            ...
            list.add(lec);
        }
     } catch(Exception e) {
     }
     return list;
   }    
}

在你的servlet中:

class MyServlet {

   MyDAO myDao = ...;

   doGet() {

      List<Lecturer> list = myDoa.getLecturers();
      request.setAttribute("list",list); 

   }
}

最后在jsp文件中,你需要获取列表并迭代。 ;)

<强> EDITED

JSP文件:

<select>
<%
   List<Lecturer> list = (List<Lecturer>) request.getAttribute("list");
   for(Lecturer lec : list) {
%>
   <option><%=lec.getFullName()%></option>
<%
   }
%>
</select>

答案 1 :(得分:0)

为连接代码创建Servlet,并使用JSTL来避免JSP文件中的Java代码。 还可以使用Request Dispatcher在Servlet中的属性中设置值,然后JSTL将允许您从servlet获取具有自己标记的Attributes,这将解决您在JSP中避免Java代码的问题。

Servlet示例代码:

request.setAttribute(“error_userID”,“UserID is not correct”); //在属性中设置错误消息                     request.getRequestDispatcher(“/ jsp / common / login.jsp”)。forward(request,response); //将属性传递给jsp

示例JSP代码

&LT; c:out value =“$ {requestScope.error_userID}”&gt;

标记命名将允许您在jsp中设置下拉值,并且值通过请求对象来通过Servlet。

享受编码.. :) 谢谢!!

答案 2 :(得分:0)

如Babak Behzadi所述写作

  1. 分离DBO连接的DAO类
  2. 的Servlet
  3. JS​​P
  4. 在您的JSP文件中,将JSTL代码写为

    <select name="name" id="id-select">
        <c:forEach items="<%=request.getAttribute("list")%>" var="i"> 
                    <option value="${i }">${i }</option>
        </c:forEach>
    </select>

    另外添加JSTL jar并导入到jsp文件

    尝试使用EL语法获取列表 items =“$ {requestScope.list}”