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 Else条件在我的JSP中似乎不起作用_Java_Jsp_If Statement - Fatal编程技术网

Java Else条件在我的JSP中似乎不起作用

Java Else条件在我的JSP中似乎不起作用,java,jsp,if-statement,Java,Jsp,If Statement,我的一个JSP中有以下代码 <% if(rsmatches!=null){%> <table> <tr> <td class="captions">Match</td> <td> <select>

我的一个JSP中有以下代码

<% if(rsmatches!=null){%>
              <table>
                  <tr>
                      <td class="captions">Match</td>
                      <td>

                          <select>
                              <%

                               while(rsmatches.next()){ 
                                %>
                                <option value="<%out.print(rsmatches.getString("matchid"));%>"><%out.print(rsmatches.getString("matchid"));%> - <%out.print(rsmatches.getString("team1name"));%> vs <%out.print(rsmatches.getString("team2name"));%></option>
                                <%}%>
                          </select>
                      </td>
                  </tr>
              </table>

              <%} else{%>
              <h1>No Result</h1>
              <%}%>

匹配
-vs
无结果
所以rsmatches是resultset,当它不为null时,它会像我期望的那样给出输出,但是当resultset没有结果时,它会显示没有值的下拉列表,而不是没有结果。我在哪里犯的错误?

试试这个:

<% if( rsmatches != null && rsmatches.size() > 0 ) { %>
0){%>
试试这个:

<% if( rsmatches != null && rsmatches.size() > 0 ) { %>
0){%>

听起来好像rsmatches是空的(实例化的)而不是空的,这可以解释为什么else不触发。

听起来好像rsmatches是空的(实例化的)not null,这可以解释为什么else不启动。

您这样做是错误的。理想情况下,您不应该在JSP中包含与数据库相关的代码,JSP显示应用程序的糟糕设计和违反应用程序层

现在回答您的问题,即使没有使用查询获取的记录,ResultSet也永远不会为null

  • 读取某个类中的resultset(最好是),然后构建一个集合。稍后将此集合传递给JSP以显示数据

  • 在检查null的同时,激发resultSet.next()方法来确定下一条记录是否存在。稍后,不要使用while循环,而是使用Do…while循环


  • 理想情况下,您不应该在JSP中包含与数据库相关的代码,JSP显示应用程序的糟糕设计和违反应用程序层

    现在回答您的问题,即使没有使用查询获取的记录,ResultSet也永远不会为null

  • 读取某个类中的resultset(最好是),然后构建一个集合。稍后将此集合传递给JSP以显示数据

  • 在检查null的同时,激发resultSet.next()方法来确定下一条记录是否存在。稍后,不要使用while循环,而是使用Do…while循环

  • 你试过这个吗

    <% if(rsmatches!=null && rsmatches.next()){%>
    <table>
        <tr>
            <td class="captions">Match</td>
            <td>
    
            <select>
            <%
    
                do{ //Change to do while since result set is already pointing to the first row coz of the statement in if loop
            %>
                    <option value="<%out.print(rsmatches.getString("matchid"));%>"><%out.print(rsmatches.getString("matchid"));%> - <%out.print(rsmatches.getString("team1name"));%> vs <%out.print(rsmatches.getString("team2name"));%></option>
                <%} while(rsmatches.next()) ;%>
            </select>
            </td>
        </tr>
    </table>
    <%} else{%>
    <h1>No Result</h1>
    <%}%>
    
    
    匹配
    -vs
    无结果
    
    您试过这个吗

    <% if(rsmatches!=null && rsmatches.next()){%>
    <table>
        <tr>
            <td class="captions">Match</td>
            <td>
    
            <select>
            <%
    
                do{ //Change to do while since result set is already pointing to the first row coz of the statement in if loop
            %>
                    <option value="<%out.print(rsmatches.getString("matchid"));%>"><%out.print(rsmatches.getString("matchid"));%> - <%out.print(rsmatches.getString("team1name"));%> vs <%out.print(rsmatches.getString("team2name"));%></option>
                <%} while(rsmatches.next()) ;%>
            </select>
            </td>
        </tr>
    </table>
    <%} else{%>
    <h1>No Result</h1>
    <%}%>
    
    
    匹配
    -vs
    无结果
    
    不要在JSP中迭代
    ResultSet
    ,也不要使用Scriptlet。你确定rsmatches为null,而不仅仅是一个空列表吗?@DilukshanMahendra JSP应该只有表示部分。与数据库相关的任务应该在一些后端Java类中完成。此外,Scriplets在近十年前就已经过时了。请使用JSTL标记库和EL.Don不要在JSP中迭代
    ResultSet
    ,也不要使用scriptlet。你确定rsmatches为null,而不仅仅是一个空列表吗?@DilukshanMahendra JSP应该只有表示部分。与数据库相关的任务应该在一些后端Java类中完成。此外,Scriplets在近十年前就已经过时了。使用JSTL标记库和EL.Oops,就可以了s没有.size()属性什么是rsmatches类?它是sql ResultsToops,没有.size()属性什么是rsmatches类?这是一个sql ResultsTwell thx,对于优秀的用户来说,你有很多选择。最快的是sandy.sk,其中chks表示null和“有行或数据”。根据你的经验,你也可以选择CuriousMinds产品。你的代码几乎相同,但你要检查的是一个集合,而不是结果集itself.将其分离到另一层会使您的代码具有可伸缩性且“耦合性”更低。好吧,thx对于优秀的SO,您有选择。最快的是sandy.sk,其中chks为null并“具有行或数据”。根据您的经验,您还可以选择CuriousMinds产品。您的代码将几乎相同,但您将检查集合,而不是结果集本身。将其分离到另一层会使代码具有可伸缩性和“更少耦合”。但正如其他人所提到的,在JSP中只有表示,在DAO层中拥有所有数据库活动总是更好的,但正如其他人所提到的,在将所有数据库活动放在DAO层中