Java 从JDBC检索值并使用JSTL标记调用方法
下面是我为从数据库检索值而编写的代码(我添加了整个代码,以便您更容易理解我在这里要说的内容): 下面是我用来将数据库中的值填充到选择框中的JSP代码Java 从JDBC检索值并使用JSTL标记调用方法,java,jsp,model-view-controller,jdbc,jstl,Java,Jsp,Model View Controller,Jdbc,Jstl,下面是我为从数据库检索值而编写的代码(我添加了整个代码,以便您更容易理解我在这里要说的内容): 下面是我用来将数据库中的值填充到选择框中的JSP代码 <select name="sltSection"> <% AddRecords added = new AddRecords(); String sectionNm [] = added.populateSelect(); for(int i=0; i<sectionNm.length
<select name="sltSection">
<%
AddRecords added = new AddRecords();
String sectionNm [] = added.populateSelect();
for(int i=0; i<sectionNm.length; i++){ %>
<option>
<% out.print(sectionNm[i]); %>
</option>
<% } %>
</select>
首先,如果你想用MVC做点什么,你应该把你的代码解耦。
JSP文件只访问请求,根本没有java代码
所以你的控制器需要这样做
request.setAttribute("ipsections",added.populateSelect());
然后,在jsp文件中
<select name='anything'>
<c:forEach items="${ipsections}" var="ipsection">
<option value="${ipsection}">${ipsection}</option>
</c:forEach>
</select>
${ipsection}
使用类中的列表作为返回值
List<String> sectionName = new ArrayList<String>();
while (resultSet.next())
sectionName.add(resultSet.getString("section_name"));
List sectionName=new ArrayList();
while(resultSet.next())
sectionName.add(resultSet.getString(“section_name”);
那就做吧
<select name='name'>
<c:forEach var="parameter" items="${sectionName }">
<option value="${parameter}">${parameter}</option>
</c:forEach>
</select>
${parameter}
此处参数是用于访问列表变量值的meadiator变量
您还可以使用字符串数组,因为它看起来是Java Web编程的新手,所以您可以使用JSP(视图)、Servlet(控制器)和实体、DAO和服务层(模型)实现完整的MVC场景。这就是你所拥有的:
型号:
DBConnection
作为数据库访问类(数据访问层)
AddRecords
作为DAO类(数据访问层)
- 没有类作为服务类(业务逻辑层)。对于本例,让我们为其创建一个
RecordService
类:
public class RecordService {
public RecordService() {
}
//since it has no real business logic, it will serve as facade
public String[] getRecords() {
AddRecords addRecords = new AddRecords();
return addRecords.populateSelect();
}
}
控制器:
- 控制器还没有类。因为我假设您使用的是纯Java EE,所以您将使用Servlet(基于以下内容的实现):
视图:
- 您已经有了一个JSP文件。由于您还没有发布名称,我们将其命名为
hello.jsp
。我将仅使用以下方法adap您的实际JSP代码:
请选择一个元素:
${record}
您已选择${selectedRecord}!
现在,要运行该示例,请使用http://localhost:8080/YourWebProjectName/RecordServlet
。此外,您还可以在web.xml
文件中设置:
RecordServlet
然后运行web项目
一些注意事项:
- 为类/方法使用相关名称,我使用了
RecordXXX
,因为您有这个AddRecord
类(它应该是RecordDAO
或对代码读者更有用的东西,比如UserDAO
或YourEntityDAO
)
- 通过不同的包分发您的类。每个包应仅包含其范围内的相关类,即对于dao类,
edu.home.dao
,对于服务/业务逻辑类,edu.home.service
,等等
使用JPA
与数据库通信。您必须使用执行该代码并将数据保存在会话或请求对象中。然后您可以使用来访问数据(并使用来显示)。我建议你浏览这些链接,它们非常好。你的答案不完整。如果您只是这样做,那么当直接访问JSP时,servlet GET请求根本不会被调用。你的假设是什么?既然OP没有定义他/她是如何实现这个MVC的,你至少应该用普通的servlet来展示这个例子。然后,建议如何通过使用MVC框架(如Struts 2、Spring、JSF、GAE或其他框架)来利用它。@LuiggiMendoza所以你想让我编写整个MVC流?也许你也可以这样做并发布你的框架建议。我不能返回一个字符串数组并在JSTL标记中使用它吗?你可以使用列表或字符串数组中的任何东西。没问题,我不明白,什么是var=“ipsection”,它没有在任何地方声明?在我的场景中,参数应该是什么?我不需要从类AddRecords
实例化对象来访问其方法populateSelect()
的返回值吗?让我们非常感谢这个伟大的答案。我也需要配置我的web.xml吗?@frozenhaart回答更新显示你可以在web.xml
中添加RecordServlet
作为欢迎文件。你的代码帮助了我很多Luiggi,我也在@frozenhaart找到了一些很棒的教程。我想网上有很多关于类似问题的教程,他们可以提供更多信息,这只是一个基本的开始。不客气:)。
public class RecordService {
public RecordService() {
}
//since it has no real business logic, it will serve as facade
public String[] getRecords() {
AddRecords addRecords = new AddRecords();
return addRecords.populateSelect();
}
}
@WebServlet("/RecordServlet")
public class RecordsServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//it will fire on a GET request (like accessing directly to the URL
//from the browser)
//here you should load the data for the View (JSP)
loadData(request);
//forward to show the view
request.getRequestDispatcher("hello.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//it will fire on a POST request (like submitting the form using POST method)
String selectedRecord = request.getParameter("selectedRecord");
System.out.println(selectedRecord);
request.setAttribute("selectedRecord", selectedRecord);
loadData(request);
//forward to show the view
request.getRequestDispatcher("hello.jsp").forward(request, response);
}
//method to load the data available to select
private void loadData(HttpServletRequest request) {
RecordService recordService = new RecordService();
String[] records = recordService.getRecords();
//set the data as attribute on the request to be available on the View
request.setAttribute("records", records);
}
}