Java 如何在JSP中迭代对象以获得百分比?

Java 如何在JSP中迭代对象以获得百分比?,java,html,jsp,servlets,percentage,Java,Html,Jsp,Servlets,Percentage,我正在从事servlet和jsp项目。我正在将一个对象从servlet传递到JSP。目前我正在迭代该对象,并在表中显示它们- 下面是我在jsp中的代码- <TABLE id="tableSMS" BORDER="1" CELLPADDING="3" CELLSPACING="1" style="text-align: center;"> <TR style="color:#ffffff;background-color:#787878;"> <

我正在从事servlet和jsp项目。我正在将一个对象从servlet传递到JSP。目前我正在迭代该对象,并在表中显示它们-

下面是我在jsp中的代码-

<TABLE id="tableSMS" BORDER="1" CELLPADDING="3" CELLSPACING="1" style="text-align: center;">
    <TR style="color:#ffffff;background-color:#787878;">
        <TH>Hash Name</TH>
        <TH>Database Name</TH>
        <TH>Version</TH>
    </TR>
    <c:forEach var="i" begin="0" end="${reportCount.getHash().size() - 1}">
        <TR>
            <TD>
                    ${reportCount.getHash().get(i)}
            </TD>
            <TD>
                    ${reportCount.getDatabaseName().get(i)}
            </TD>
            <TD>
                    ${reportCount.getVersion().get(i)}
            </TD>
        </TR>
    </c:forEach>
我想我应该在上面的新表中再次迭代
reportCount
对象,并在这里提取百分比,但不确定我该怎么做?有人能举个例子吗

更新:-

这是我的bean代码-

public class Response {
    private List<String> hash = new LinkedList<String>();
    private List<String> databaseName = new LinkedList<String>();
    private List<String> version = new LinkedList<String>();

    // getters and setters here

}
公共类响应{
私有列表哈希=新的LinkedList();
私有列表数据库名=新的LinkedList();
私有列表版本=新建LinkedList();
//这里有接球手和接球手
}

有三件事如下:

  • 添加函数taglib:
  • 如果在任何其他页面上不需要,请将reportsCounts变量添加到requestScope而不是会话,并按以下方式使用:
    
    ${requestScope.reportCounts.hash[loop.index]}
    ${reportCount}
    ${requestScope.reportCounts.version[loop.index]}
    
  • 现在将百分比显示为:
    ${(oracleDBCount/fn:length(requestScope.reportCounts))*100}%

  • 根据我的经验,在JSP页面上进行数字运算会使其很快无法读取。此外,您将来可能会遇到其他要求,例如:

    • 文本匹配(您是否保证值始终为“oracle”?或者它是否可以成为“oracle”或“oracle”
    • 如果有零个报告呢?那么您需要一个if条件来防止被零除
    • 如果您的客户说“我们有更多的报表服务器,如MS、Postgres……您能显示其中的百分比吗?”
    在创建reportCount对象时,是否可以在servlet内部进行计算? 然后可以在会话属性中传递该值

    request.getSession(true).setAttribute("oracleReports", "50%")
    
    然后在JSP输出中

    <c:out value="${sessionScope.oracleReports}"/>
    
    
    
    用于执行操作,以下是代码

    阅读注释以理解代码

    向添加id,以便我可以使用 将id附加到索引中,以便每个原始的 身份证

    
    ${reportCount.getDatabaseName().get(i)}
    
    将Id添加到,以便我可以使用 JavaScript

    
    %
    %
    
    调用javascript函数将值设置为原始值,我们没有这样做 有任何按钮触发我们打开一个raw并添加JavaScript调用 使脚本在每次加载页面时被触发 生的

    setPercentage('${reportCount.getHash().size()-1}');
    
    这里定义了要做什么

    
    函数集合百分比(var索引){
    
    对于(var i=0;i这里什么是
    reportCounts
    ?你能提供一个关于我的代码的示例吗?如果我与我的示例相关,我想这里缺少了一些东西。这是你在会话中设置的同一个变量,我在servlet
    request.setAttribute(“reportCounts”,dbDetails);request.getRequestDispatcher(“/dbDetails.jsp”)的请求中设置了它.forward(request,response);
    如果有任何内容丢失或不清晰,请告诉我。我不能使用此选项,因为我的哈希和databasename不是一个单一值。因此我不能这样做
    ${reportCount.hash}
    。我有什么办法可以根据我的例子来做这项工作吗?不,我说的是-在你的例子中,你假设-在这个
    ${reportCount.hash}
    hash是一个字符串变量,对吗?在我的情况下,它不是字符串变量Check现在,我已经在答案部分更新了上面的代码。请让我知道它是如何运行的。
    <c:out value="${sessionScope.oracleReports}"/>
    
    <c:forEach var="i" begin="0" end="${reportCount.getHash().size() - 1}">
                        <TD id="databaseName<c:out value='${i}' />">
                                ${reportCount.getDatabaseName().get(i)}
                        </TD>
    
    <tr>
         <td id="oraclePercentage">%</td>
         <td id="mySQLPercentage">%</td>
    </tr>
    
    <TR><TD><Script>setPercentage('${reportCount.getHash().size() - 1}');</script><TD><TR>
    
    <Script>
    function setPercentage(var index){
      for(var i=0; i<index;i++){
         var documentType=document.getElementById("databaseName"+i).innerHTML;
         var oracleCount=0;
         var mySQLCount=0;
         if(vardocumentType=='Oracle')
           oracleCount+=(Number)1;
         else if(vardocumentType=='MySQL')
           mySQLCount+=(Number)1;
         document.getElementById("oraclePercentage").innerHTML=(oracleCount/index)*100;
         document.getElementById("mySQLPercentage").innerHTML=(mySQLCount/index)*100;
     }
     </script>