Java 在struts中从数据库检索数据
我正在用struts框架检索所有数据库数据,代码运行良好 我只是将数据列表(数组列表)放入JSP请求中(如上代码所示)。我知道我们可以使用逻辑标记库获取数据,但我对此不太清楚。将数据放入请求中可以吗?以及我们如何使用逻辑库检索数据?或者其他任何方式Java 在struts中从数据库检索数据,java,struts,Java,Struts,我正在用struts框架检索所有数据库数据,代码运行良好 我只是将数据列表(数组列表)放入JSP请求中(如上代码所示)。我知道我们可以使用逻辑标记库获取数据,但我对此不太清楚。将数据放入请求中可以吗?以及我们如何使用逻辑库检索数据?或者其他任何方式 HashMap hm =null; List list = new ArrayList(); String uname=""; int no=0; while(rs.ne
HashMap hm =null;
List list = new ArrayList();
String uname="";
int no=0;
while(rs.next())
{
uname=rs.getString(1);
no = Integer.parseInt(rs.getString(2));
hm=new HashMap();
hm.put("name", uname);
hm.put("number", no);
list.add(hm);
}
request.setAttribute("myList",list);
jsp页面
<%
try
{
DataForm d= new DataForm();
HashMap hm;
List list = new ArrayList();
if(request.getAttribute("myList")!=null)
list=(List)request.getAttribute("myList");
else
out.print("No Data Found..");
for(int i=1;i<list.size();i++)
{
hm=(HashMap)list.get(i);
%><tr> <td><%out.println(hm.get("name"));%></td>
<td><%out.println(hm.get("number"));%></td></tr><%
}
}
catch(Exception e){e.printStackTrace();}
%>
逻辑标记不用于检索数据:它们用于在JSP中实现一些逻辑,而不使用Scriptlet,这被认为是不好的做法
实际上,控制器的工作(Struts操作)不是从数据库中检索数据,而是调用将要调用的对象,并将对象列表放入请求中,以便视图显示它们
然而,struts逻辑标记几乎都被弃用,取而代之的是JSPEL和JSTL。您的scriptlet代码可以替换为以下行:
<c:choose>
<c:when test="${myList == null}">
No Data Found.
</c:when>
<c:otherwise>
<c:forEach var="element" items="${myList}">
<tr>
<td><c:out value="${element.name}"/></td>
<td><c:out value="${element.number}"/></td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
没有找到任何数据。
它的可读性更高,并且能够正确地转义数据
我还将使用对象而不是哈希映射来保存数据。Java是一种面向对象语言。使用对象和封装。如果我正确理解了您的意图,那么我必须说您没有有效地使用HashMap
Hashmap用于存储对,以便您能够使用键fast~O(1)检索值。键在hashmap中是唯一的。如果您尝试使用同一密钥逐个存储多个对,数据将被覆盖,最后您将只看到最后一对
在本例中,您将HashMap用作保存“name”和“number”的容器,因此我认为根本不需要HashMap
这是您可以做的:
定义一个包含名称和编号的类:
class Data
{
private String name;
public int uNo;
public Data(String name, int uNo)
{
this.name = name;
this.uNo = uNo;
}
public getName()
{
return this.name;
}
public getUNo()
{
return this.uNo;
}
}
您的Java代码:
List<Data> list = new ArrayList<Data>();
while(rs.next())
{
String uname=rs.getString(1);
int no = Integer.parseInt(rs.getString(2));
list.add(new Data(uname, no));
}
request.setAttribute("myList",list);
List List=new ArrayList();
while(rs.next())
{
字符串uname=rs.getString(1);
int no=Integer.parseInt(rs.getString(2));
增加(新数据(联阿援助团,编号));
}
setAttribute(“myList”,列表);
您的Jsp代码:
<%
try
{
DataForm d= new DataForm();
List<Data> list = new ArrayList<Data>();
if(request.getAttribute("myList")!=null)
{
list = (List<Data>)request.getAttribute("myList");
for(Data data in list)
{
%><tr><td><%out.println(data.getName());%></td>
<td><%out.println(data.getUNo());%></td></tr><%
}
}
else
{
out.print("No Data Found..");
}
}
catch(Exception e){e.printStackTrace();}
%>
现在,来到逻辑标记库
这是您需要进行以下修改的内容:
i) 在jsp中,您可以执行以下操作:
在jsp的开头添加以下行:
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
使用以下命令写入数据:
<logic:present name="myList">
<logic:iterate name="myList" id="myListId">
<tr>
<td><bean:write name="myListId" property="name"/></td>
<td><bean:write name="myListId" property="uNo"/></td>
<tr>
</logic:iterate>
</logic:present>
<logic:notPresent name="myList">
No Data found.
</logic:notPresent>
没有找到任何数据。
理想情况下,我会使用JSTL来显示User/No的列表
我还没有测试过这段代码。但它传达了我的想法