Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Struts中使用servlet在JSP中动态检索SQL记录_Java_Jsp_Servlets_Struts2 - Fatal编程技术网

Java 如何在Struts中使用servlet在JSP中动态检索SQL记录

Java 如何在Struts中使用servlet在JSP中动态检索SQL记录,java,jsp,servlets,struts2,Java,Jsp,Servlets,Struts2,目前,我正在从jsp本身检索sql记录,例如,当我想查看特定人员的详细信息时,我将在jsp中的文本框中输入他的id,并在jsp本身中搜索和显示记录。但实际上我想要的是,我想要在servlet中搜索记录并通过jsp显示它们。此外,我正在为这个应用程序使用struts框架 下面的代码是控制器,我检索了控制器中的所有记录,并将它们存储在集合对象中 String driverName = "com.mysql.jdbc.Driver"; String connectionUrl = "jdbc:my

目前,我正在从jsp本身检索sql记录,例如,当我想查看特定人员的详细信息时,我将在jsp中的文本框中输入他的id,并在jsp本身中搜索和显示记录。但实际上我想要的是,我想要在servlet中搜索记录并通过jsp显示它们。此外,我正在为这个应用程序使用struts框架

下面的代码是控制器,我检索了控制器中的所有记录,并将它们存储在
集合
对象中

String driverName = "com.mysql.jdbc.Driver";  
String connectionUrl = "jdbc:mysql://235.4.23.34:3306/";
String dbName = "abc";
String userId = "root";
String password = "ipser"; 
Connection con = null;
Statement  stmt = con.createStatement(); 
ResultSet rs;

Class.forName(driverName);
con = DriverManager.getConnection(connectionUrl+dbName, userId, password); 

String s=" select * from contacts";
rs=stmt.executeQuery(s); 
while(rs.next()){ 

List agentList  = new ArrayList(); 

agentList.add(rs.getString("CUSTOMER_ID"));  
agentList.add(rs.getString("VENDOR"));  
agentList.add(rs.getString("sector"));  
agentList.add(rs.getString("AMOUNT"));  
agentList.add(rs.getString("total_AMOUNT"));  
agentList.add(rs.getString("STATUS"));  
agentList.add(rs.getString("delivery_STATUS")); 
}
request.setAttribute("data", agentList);

RequestDispatcher dispatcher = request.getRequestDispatcher("success.jsp");  
if (dispatcher != null){  
       dispatcher.forward(request, response);  
}     
然后我将集合对象传递给success.jsp,并使用迭代器迭代集合对象,如下所示

success.jsp

<table id="tblMain"  align="center"  width="1200" style="border-collapse:collapse;border: 1px dotted grey;;cursor: pointer;"> 
    <tr>  

   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">CUSTOMER_ID</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">VENDOR</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">sector</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">AMOUNT</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">total_AMOUNT</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">STATUS</TH>
   <TH bgcolor="#6CBFE8" style="border:1px dotted grey;">delivery_STATUS</TH>
    </tr>  
    <tr>
      <% List mydata= (List)request.getAttribute("data");

        Iterator itr = mydata.iterator();
        while (itr.hasNext()) {
          Object element = itr.next();%> 

          <td  style="border-right: 1px dotted grey;" align="center" width="15%">
            <%=element%></td>        
      <%}%> 
    </tr>

</table>   

客户识别码
小贩
部门
数量
总金额
地位
交货状态

问题是,对于单记录,这很好。但对于多个记录,所有记录都显示在一行中。我想在一行中显示一个记录的七个字段。有人能提供我的解决方案吗?

< P>你应该考虑使用POJO来存储你的客户信息。例如:

public class Customer {
    private String customerId;
    private String vendor;
    ...
    // getter and setter
}
因此,现在可以提供客户对象列表,而不是字符串列表。然后,在JSP中,您可以有以下内容:

Customer element = (Customer) itr.next();
之后,您可以通过使用其getter访问customer对象的属性:

<%= element.getCustomerId() %>


这个例子向您展示了如何按照自己的方式来做,但是您可以使用JSTL而不是Scriplets来做。请看一些关于Struts和JSTL的文档。

以下是您可以做的。不要将结果集添加到列表中,而是创建一个POJO类并创建该类的列表,然后在该列表上迭代,为列表中的每个项创建一个新标记

下面是Agent.java的外观

public class Agent {

    private String customerId;
    private String vendor;
    private String sector;
    private String amount;
    private String totalAmount;
    private String status;
    private String deliveryStatus;

    public String getCustomerId() {

        return customerId;
    }

    public void setCustomerId(String customerId) {

        this.customerId = customerId;
    }

    public String getVendor() {

        return vendor;
    }

    public void setVendor(String vendor) {

        this.vendor = vendor;
    }

    public String getSector() {

        return sector;
    }

    public void setSector(String sector) {

        this.sector = sector;
    }

    public String getAmount() {

        return amount;
    }

    public void setAmount(String amount) {

        this.amount = amount;
    }

    public String getTotalAmount() {

        return totalAmount;
    }

    public void setTotalAmount(String totalAmount) {

        this.totalAmount = totalAmount;
    }

    public String getStatus() {

        return status;
    }

    public void setStatus(String status) {

        this.status = status;
    }

    public String getDeliveryStatus() {

        return deliveryStatus;
    }

    public void setDeliveryStatus(String deliveryStatus) {

        this.deliveryStatus = deliveryStatus;
    }
}
一旦你有了这个类,你就需要创建列表和列表中的所有项目

List<Agent> agentList = new ArrayList<Agent>();

// for every row add the attributes to agent object and then add the agent object to list

for(looping condition) {

    Agent currentAgent = new Agent();
    currentAgent.setStatus(rs.getString("status"));
    ...
    ...
    ...

    agentList.add(currentAgent);
}
List agentList=new ArrayList();
//对于每一行,将属性添加到代理对象,然后将代理对象添加到列表
for(循环条件){
代理currentAgent=新代理();
currentAgent.setStatus(rs.getString(“status”);
...
...
...
agentList.add(当前代理);
}
现在已经有了这个列表,您可以修改jsp代码来执行类似的操作

<% List mydata= (List)request.getAttribute("data");

Iterator itr = mydata.iterator();
while (itr.hasNext()) {
    Agent currentAgent = itr.next();%> 
        <tr>
            <td  style="border-right: 1px dotted grey;" align="center" width="15%"> <%=currentAgent.status%></td>
            <td  style="border-right: 1px dotted grey;" align="center" width="15%"> <%=currentAgent.customerId%></td>
            ...
            ...
            ...
        <tr>
<%}%> 

...
...
...

这应该将数据显示为多行。

不要使用scriplets。如果您使用的是Struts2,那么为什么要使用servlet,使用S2操作呢。阅读一些关于S2的教程:。谢谢@parth6它工作起来真的很棒,我在这个概念上花了很长时间,现在你让我松了一口气,非常感谢。上帝保佑你谢谢你的回答。在scriplet中写db访问代码好吗jsp@Mano字体根本不使用便签是一种不好的做法。