首页 > 解决方案 > 如果在用户选择的基础上不工作

问题描述

我正在处理 HTML 表格。为此,我从我的 Java 代码中返回 JSON。我有一个作为 HTML 页面的 UI,其中有一个具有从日期到日期的表单和一个具有 4 个这样的选项的选择标签

 <form id="formId" method="get">
        <div class="container">
            <h4>Start Date:</h4>
            <input type="text" id="startdate" name="fromdate" width="276"
                placeholder="dd/mm/yyyy" required />

            <h4>End Date:</h4>
            <input type="text" id="enddate" name="todate" width="276"
                placeholder="dd/mm/yyyy" required />


            <h4>Outlets:</h4>
            <select name="outlet" id="all">
                <option>ALL</option>
                <c:forEach var="item" items="${obj.outlet}">
                    <option>${item}</option>
                </c:forEach>
            </select>

            <br>

            <br>
            <div>

                <button id="button" class="btn btn-default" type="submit">Search</button>
            </div>

        </div>
</form>

我从表单中获取输入并在 doget 方法中获取 servlet 中的值,如下所示:

    String fromdate=request.getParameter("fromdate");
        String todate=request.getParameter("todate");
        String outlet=request.getParameter("outlet");

//      System.out.println(String.format("fromdate: %s, todate: %s, outlet: %s", new Object[]{fromdate, todate, outlet}));
        List<String> outletList = Arrays.asList(outlet.split("\\s*,\\s*"));
        try {
            String json = HourlySalesDateOutlet.createJson(outletList, fromdate, todate);
            response.getWriter().write(json);
//          System.out.println("dheeraj"+json);
        }
        catch (Exception e) {

            e.printStackTrace();
        }


    }

现在这是我的 Java 类,我在其中编写了两个查询,一个是用户选择全部,另一个是用户选择特定出口。我的问题是 if 语句没有执行只有 else 正在执行如果用户从 FORM 中选择一个出口如果用户选择 ALL 则它不起作用。

下面是我的代码:

   public static String createJson(List<String> outletList, String startDate, String endDate) throws Exception {
        Connection con = null;
        String query1;
        List<Map<String, String>> mapList = new LinkedList<Map<String, String>>();
        String outletStr = outletList.stream().collect(Collectors.joining("','", "('", "')"));
        if (outletList.equals("ALL")) {
            query1 = "SELECT a.OUTLET,b.CUSTOMERDESCRIPTOR,a.BILLDATE,HOUR(a.BILLTIME) AS HOURS, SUM(a.NETAMOUNT) AS AMOUNT FROM SYNCBILL a,ecustomer b WHERE a.OUTLET=b.CUSTOMERIDENTIFIER AND a.CANCELLED<>'Y' AND a.BILLDATE BETWEEN STR_TO_DATE(REPLACE('"
                    + startDate + "','/','.'),GET_FORMAT(DATE,'EUR')) AND STR_TO_DATE(REPLACE('" + endDate
                    + "','/','.'),GET_FORMAT(DATE,'EUR')) GROUP BY OUTLET,BILLDATE,HOUR(BILLTIME)";
            System.out.println("all"+query1);

        } else {

            query1 = "SELECT a.OUTLET,b.CUSTOMERDESCRIPTOR,a.BILLDATE,HOUR(a.BILLTIME) AS HOURS, SUM(a.NETAMOUNT) AS AMOUNT FROM SYNCBILL a,ecustomer b WHERE a.OUTLET=b.CUSTOMERIDENTIFIER AND b.CUSTOMERDESCRIPTOR in "
                    + outletStr + " AND a.CANCELLED<>'Y' AND a.BILLDATE BETWEEN STR_TO_DATE(REPLACE('" + startDate
                    + "','/','.'),GET_FORMAT(DATE,'EUR')) AND STR_TO_DATE(REPLACE('" + endDate
                    + "','/','.'),GET_FORMAT(DATE,'EUR')) GROUP BY OUTLET,BILLDATE,HOUR(BILLTIME)";
            System.out.println("2"+query1);
        }

        try {


            con = DBConnection.createConnection();


            PreparedStatement ps = con.prepareStatement(query1);
            ResultSet rs = ps.executeQuery();
            Map<RecordKey, Long> mapData = getMapList(rs);
        }

我没有发布完整的 Java 代码。我想要的是如果用户选择所有然后 if 语句应该执行并且其中的查询应该执行。如果用户选择 else,那么 other 应该可以工作,并且在我的代码中只有 else 在没有执行时才有效。

我该如何调试呢?

标签: javaservletsforms

解决方案


对于您的问题,我有一个简单的解决方案。当用户选择全部时,在这种情况下传递空列表并在进行查询时只输入这个条件。

if (outletList.size()==0) {
// case for all
} else {
// do regular stuff
}

推荐阅读