If-else语句不能正常工作

时间:2016-06-27 12:00:23

标签: java jsp if-statement

我的网站就像SO一样。在这个页面中,我试图在两个单独的表中检索已回答和未回答的问题。但在输出中,我得到的答案和未答复的问题都显示在已回答的问题表中。这里出了什么问题?我感谢所有的帮助和努力。这是我的代码: -

<%@page import="model.QuestionBean"%>
<%@page import="java.util.List"%>
<%@page import="model.QuestionDAO"%>
<%@page import="model.QuestionDAOFactory"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>All Questions</title>
    </head>
    <body>
        <div>



                    <%
                    QuestionDAOFactory qdf=new QuestionDAOFactory();
                    QuestionDAO qd=qdf.createQuestionDAO();
                    List<QuestionBean> list=qd.getQuestions();
                    for (QuestionBean qb : list) {
                    %>

                        <%
                        if(qb.getIsAnswered().equalsIgnoreCase("Y"))
                        %>
                        <table style="width: 50%;height: 100%;border: 1px solid black;" align="">
                            <thead>
                                <tr>
                                    <th>Answered Questions</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%
                                    {
                                %>
                            <tr><td><a href="viewQuestion.jsp?id=<%=qb.getQuestionId() %>"><%=qb.getQuestionText() %></a></td></tr>
                                <%
                                    }
                                %>
                            </tbody>
                        </table>    
                        <%
                            else
                        %>
                        <table style="width: 50%;height: 100%;border: 1px solid black;" align="">
                            <thead>
                                <tr>
                                    <th>Unanswered Questions</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%
                                    {
                                %>
                            <tr><td><a href="viewQuestion.jsp?id=<%=qb.getQuestionId() %>"><%=qb.getQuestionText() %></a></td></tr>
                                <%
                                    }
                                %>
                            </tbody>
                        </table>


                    <%
                        }
                    %>

            </table>
        </div>
    </body>
</html>

4 个答案:

答案 0 :(得分:1)

if-else语句的块看起来不正确。

尝试:

                    <%
                    if(qb.getIsAnswered().equalsIgnoreCase("Y")) {
                    %>
                      <table>
                        ...
                      </table>
                    <%
                    } else {
                    %> 
                      <table>
                        ...
                      </table>
                    <%
                    }
                    %>             

编辑:

在仔细阅读问题之后,似乎JSP中的逻辑是错误的。如果您希望在单独的表中显示已回答的未回答问题,则必须首先迭代所有已回答的问题并将它们放在一个表中,然后迭代所有未回答的问题并将它们放在第二个表中。例如,您可以通过两个循环来实现这一目标:

<table ...>
...
<%
  for (QuestionBean qb : list) {
    if(qb.getIsAnswered().equalsIgnoreCase("Y")) {
%>
    ... show answered question ...
<%
    }
  }
%>
</table>
<table ...>
...
<%
  for (QuestionBean qb : list) {
    if(!qb.getIsAnswered().equalsIgnoreCase("Y")) {
%>
    ... show unanswered question ...
<%
    }
  }
%>
</table>

或者您可以通过在getAnsweredQuestions()课程中引入getUnAnsweredQuestions()QuestionDAO来避免使用if语句。

您当前的逻辑似乎为每个问题创建一个单独的表。

答案 1 :(得分:1)

我认为问题出在你的if-else语句中。你的getter告诉我返回值是一个布尔值但是你做了一个字符串比较:

qb.getIsAnswered().equalsIgnoreCase("Y")

更改数据模型或调试此行的返回值。

请发布您的模特课。

答案 2 :(得分:0)

检查&#39; qb.getIsAnswered()&#39;的内容。它可能是&#39; Y&#39;总是

答案 3 :(得分:0)

存在一些问题:

  • 您正在为每个QuestionBean创建一个新表,因为表定义在for循环中。
  • 你最后有一个无与伦比的标签。

如果你想要2个表,并且你坚持使用上面的API,那么你需要两个for循环来遍历返回的列表。一个循环将呈现已回答的问题,另一个回答未回答的问题。

这样的事情:

<%@page import="model.QuestionBean"%>
<%@page import="java.util.List"%>
<%@page import="model.QuestionDAO"%>
<%@page import="model.QuestionDAOFactory"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>All Questions</title>
  </head>
  <body>
    <div>
        <%
          QuestionDAOFactory qdf=new QuestionDAOFactory();
          QuestionDAO qd=qdf.createQuestionDAO();
          List<QuestionBean> list=qd.getQuestions();
        %>
        <table style="width: 50%;height: 100%;border: 1px solid black;" align="">
          <thead>
            <tr>
              <th>Answered Questions</th>
            </tr>
          </thead>
          <tbody>
            <%
              for (QuestionBean qb : list) {
                if(qb.getIsAnswered().equalsIgnoreCase("Y")) {
            %>
            <tr><td><a href="viewQuestion.jsp?id=<%=qb.getQuestionId() %>"><%=qb.getQuestionText() %></a></td></tr>
             <%
                }
              }
             %>
          </tbody>
        </table>    
        <table style="width: 50%;height: 100%;border: 1px solid black;" align="">
          <thead>
            <tr>
              <th>Unanswered Questions</th>
            </tr>
          </thead>
          <tbody>
             <%
               for (QuestionBean qb : list) {
                 if(!qb.getIsAnswered().equalsIgnoreCase("Y")) {
             %>
             <tr><td><a href="viewQuestion.jsp?id=<%=qb.getQuestionId() %>"><%=qb.getQuestionText() %></a></td></tr>
             <%
                 }
               }
             %>
          </tbody>
        </table>
    </div>
  </body>
</html>