Если еще не работает на основе выбора пользователя - PullRequest
0 голосов
/ 23 октября 2018

Я работаю над таблицами HTML.Для этого я возвращаю JSON из моего кода Java.У меня есть пользовательский интерфейс в виде HTML-страницы, где есть форма, имеющая дату и дату, и тег выбора, имеющий 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, подобный приведенному ниже:

    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 не выполняется, только если выполняется, если пользователь выбирает один выход из 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.То, что я хочу, - это если пользователь выбирает все, тогда, если оператор должен выполняться и запрос в нем должен выполняться.Если пользователь выбирает другое, тогда другое должно работать, и здесь, в моем коде, только другое работает, если не выполняется.

Как я могу отладить это?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Как указано в комментариях, вы не сравниваете сопоставимые типы.outletList - это List, и его нельзя приравнять к String, хотя список может содержать только один элемент, который, как оказалось, String.Итак, outletList.equals("ALL") не делает то, что вы думаете.

Но это поднимает интересный вопрос.У вас есть список выбора, который не является multiple, поэтому зачем возвращать список того, что всегда a одиночное значение?И зачем переходить на отправку пустого списка, если выбран ALL?Это не имеет смысла;был выбран один выбор, как и ожидалось.Это добавляет ненужную путаницу.

Попробуйте вместо этого отправить одно значение обратно как String и позволить этому значению определить логику, чтобы у вас была гибкость.Если невозможно избежать списка, тогда примите только одно значение (например, list[0]) и вызов равен на , что не List.

if(outletList[0].equals("All")) {...}

Если позже вы окажетесь в ситуации, когда вам потребуется более одной пары if-else, вы можете переключиться на switch следующим образом:

switch(outletList[0]) { // or the single value...
    case "ALL":
        ...
    ...
    default:
        ... 
}
0 голосов
/ 23 октября 2018

У меня есть простое решение вашей проблемы.Когда пользователь выбирает все, тогда в этом случае пропустите пустой список и при выполнении запроса просто поставьте это условие.

if (outletList.size()==0) {
// case for all
} else {
// do regular stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...